题目链接
https://pintia.cn/problem-sets/994805342720868352/problems/994805482919673856
题解
题目要求
- 输入
- N:正整数,不超过10000,结点的数量,索引为[1,N]
- N-1条边
- 输出
- 输出深度最大的根结点,如果不唯一,则按升序输出。如果这个图不是树,则输出图中连通分量的数量
方法一
解题思路
- 没有回路的无向图是连通的当且仅当它是树
- 求该图的连通分量数,如果连通分量数大于1,则输出连通分量数,程序终止;
- 对于每一个结点,将其作为根结点,通过dfs求其高度depth,将depth与全局最大高度maxDepth比较,并更新全局最大高度及其对应根结点;
- 输出根结点
代码
如果用邻接矩阵,则第3个点会超时,用邻接表则不超时。
1 | // Problem: PAT Advanced 1021 |
方法二
思路
第一次DFS:判断连通分量数量,如果超过1,则直接输出,程序结束
同时保存深度最大的那些结点到数组s中
第二次DFS:从s中的任一个结点出发进行DFS,此时深度最大的结点与s的并集就是结果
这个思路很妙,并且速度很快:这是无向图,是双向的,所以正序倒序各求一遍合起来就是结果。
代码
1 | // Problem: PAT Advanced 1021 |
参考链接
https://blog.csdn.net/liuchuo/article/details/52294178
作者:@臭咸鱼
转载请注明出处:https://www.cnblogs.com/chouxianyu/
欢迎讨论和交流!