如何使用数组模拟树?
代码示例如下:
const int N=10010,M=N*2;
int n;
int p[N];
int h[N],e[M],ne[M],idx;
void add(int a,int b)
{
e[idx]=b,ne[idx]=h[a],h[a]=idx++;
}
注:因为树是无向图,所以可以把每一条边当成2个有向边存储。这样就是上面第三行为什么M是N的2倍的原因。
那么当树以无向图的方式存储(也就是每一条边当成2条有向边存储时),如何使用dfs()遍历每个节点而不重复呢?
见这篇博客