题目介绍
给定一颗树,树中包含 nn 个结点(编号 1∼n1∼n)和 n−1n−1 条无向边。
请你找到树的重心,并输出将重心删除后,剩余各个连通块中点数的最大值。
重心定义:重心是指树中的一个结点,如果将这个点删除后,剩余各个连通块中点数的最大值最小,那么这个节点被称为树的重心。
输入格式
第一行包含整数 nn,表示树的结点数。
接下来 n−1n−1 行,每行包含两个整数 aa 和 bb,表示点 aa 和点 bb 之间存在一条边。
输出格式
输出一个整数 mm,表示将重心删除后,剩余各个连通块中点数的最大值。
数据范围
1≤n≤1051≤n≤105
输入样例
9
1 2
1 7
1 4
2 8
2 5
4 3
3 9
4 6
输出样例:
4
题目详解
图的邻接表表示、树的重心题目详解
1.图的邻接表表示详解
邻接表:h[N]表示有N个顶点,也就会有N个列表,这N个列表就是图G的邻接表。其中,h[i]存放顶点i的所有出边组成的列表‘
e[i] ne[i] 中的i并不是顶点号 e[i]的值才是顶点号 i的值随便是多少 ne[i]的值是e[j]中的j,也并不是顶点
h[i]中的i才是顶点 h[i]并不是头节点 而是头指针 指向头节点的指针
idx只是为了顺次排列这些数据
int h[N]; //邻接表存储树,有n个节点,所以需要n个队列头节点
int e[M]; //存储元素
int ne[M]; //存储列表的next值
int idx; //单链表指针