using namespace std;
const int N = 1e5 + 10; //数据范围是10的5次方
const int M = 2 * N; //以有向图的格式存储无向图,所以每个节点至多对应2n-2条边
int h[N]; //邻接表存储树,有n个节点,所以需要n个队列头节点
int e[M]; //存储元素
int ne[M]; //存储列表的next值
int idx; //单链表指针
int n; //题目所给的输入,n个节点
int ans = N; //表示重心的所有的子树中,最大的子树的结点数目
bool st[N]; //记录节点是否被访问过,访问过则标记为true
//a所对应的单链表中插入b a作为根
void add(int a, int b) {
e[idx] = b, ne[idx] = h[a], h[a] = idx++;
}
// dfs 框架!!每个点都有很多信息,比如此节点为根有多少个节点,删除此节点,每棵树的节点最多有多少res,而且遍历过程会经历所有节点,所以可以从任意一点出发!!
/
void dfs(int u){
st[u]=true; //!!!! 标记一下,记录为已经被搜索过了,下面进行搜索过程,这一步最重要,需要写在前面,因为在下面的for语句里写会少改一个点,就是根节点,所以遍历条数会增多。
for(int i=h[u];i!=-1;i=ne[i]){
int j=e[i];
if(!st[j]) {
dfs(j);
}
}
}
/
用一下 $Markdown$ 语法吧…