int find(int x)
{
if (p[x] != x) p[x] = find(p[x]);
return p[x];
}
void tarjan(int u)
{
st[u] = 1;
for (int i = h[u]; ~i; i = ne[i])
{
int j = e[i];
if (!st[j])
{
tarjan(j);
p[j] = u;
}
}
for (auto item : query[u])
{
int y = item.first, id = item.second;
if (st[y] == 2)
{
int anc = find(y); //这里求出来的anc就是最近的公共父节点
}
}
st[u] = 2;
}
原理证明上还有些问题,日后解决下
1069

被折叠的 条评论
为什么被折叠?



