代码中用到的变量及数组的作用解析:
1. 变量cnt:用于迭代存入所有的边
2. head[x]数组:head[x]表示的是x最后读入的出边的编号(x为树的一个节点)
3. e[max*2]数组:表示树中所有边(例如e[0]表示第0号边)
4. vis[x]数组:记录该节点是否遍历过,若已遍历,则不考虑
建树以及dfs遍历
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
const int maxn=2e5+10;
struct edge
{
int to;
int next;
}e[maxn<<1];
int n;
int cnt=-1;
int head[maxn];
bool vis[maxn];
void init()
{
//memset(e,0,sizeof(e));
memset(head,-1,sizeof(head));
memset(vis,false,sizeof(vis));
cnt=-1;
}
void add_edge(int u,int v)
{
e[++cnt].to=v;
e[cnt].next=head[u];
head[u]=cnt;
}
void dfs(int x)
{
if(!vis[x])
{
cout<<x<<" ";
vis[x]=1;
for(int i=head[x];i!=-