【图论】基环树的遍历
作者:互联网
突发奇想可以用拓扑排序的写法,从叶子开始删,然后deg为0的是父亲,deg不为0的是后继节点,最后会剩下一个环deg都是2。
for(int i = 1; i <= n; ++i) {
G[i].clear();
deg[i] = 0;
cnt[i] = 0;
}
for(int i = 1; i <= n; ++i) {
int u, v;
scanf("%d%d", &u, &v);
G[u].push_back(v);
G[v].push_back(u);
++deg[u];
++deg[v];
}
for(int i = 1; i <= n; ++i) {
if(deg[i] == 1)
Q.push(i);
}
while(!Q.empty()) {
int u = Q.front();
Q.pop();
++cnt[u];
for(int &v : G[u]) {
--deg[v];
if(deg[v] != 0)
cnt[v] += cnt[u];
if(deg[v] == 1)
Q.push(v);
}
}
标签:图论,遍历,突发奇想,int,基环树,deg 来源: https://www.cnblogs.com/purinliang/p/14033781.html