PTA-1021-Deepest Root
Deepest Root
思路:
1.进行一次dfs,统计有多少连通区域,如果n个点只有1个连通区域,就是树,如果多于1个连通区域,即证明不是树
2.如果是树,采用类似高中化学找碳链最长子链的方法:
①第一次dfs2,以任意一个结点(random),开始dfs找到最大深度终点1 2
②第二次dfs2,以找到的最深终点(1 2)为起点,进行dfs,找到最大深度(到3 4)
3.注意本题对访问日志的处理为
book[cur]=1;dfs(cur);
VS:在寻找城市之间最短路径时所使用的dfs:
book[cur]=1;dfs(cur);book[cur]=0;
为什么存在重新置0?
因为本题为树的dfs,不存在相互连通(一个城市只会与一个城市相连),而城市之间的最短路径的问题中城市之间相互连通(一个城市可能与多个城市相连)
解答:
#include<iostream>
#include<vector>
#include<set>
using namespace std;vector<int> v[10001];
int visited[10001];
vector<int>farthest_point;
int maxdis=0;
set<int>final_answer;void dfs(int cur){//及时止损if(visited[cur]) return;visited[cur]=1;//标记这个点被访问//统计有多少个连通分量,所以不需要维护变量for(int i:v[cur]){//遍历当前点的所有邻居dfs(i);}
}
void dfs2(int cur,int depth){if(visited[cur]) return;visited[cur]=1;//标记已访问if(depth>maxdis){maxdis=depth; //更新最大深度farthest_point.clear(); //先清空再更新farthest_point.emplace_back(cur); //清空最远点集合之后将这个点放进去}else if(depth==maxdis){//同等深度就不需要清空点集,只需要把这个等深度加进去就可以了farthest_point.emplace_back(cur);}for(int i:v[cur]){//访问当前结点的邻居dfs2(i,depth+1);}
}
int main(){int N,i,j,k;cin>>N;//N个点最少需要N-1条边将他们全部连接起来,所以从1到Nfor(i=1;i<N;i++){cin>>j>>k;v[j].emplace_back(k);v[k].emplace_back(j);}//先判断for(int i=1;i<=N;i++)visited[i]=0;int cnt=0;//注意这里是要统计有多少个连通分量for(int i=1;i<=N;i++){if(!visited[i]){cnt++;dfs(i);}}if(cnt>1){//不是树,即成环了cout<<"Error: "<<cnt<<" components";}else{//遍历整个图只能找到一个连通的点集,即是树for(int i=1;i<=N;i++)visited[i]=0;dfs2(1,0); //第一次dfs2&&随便找一个起点进行DFSfor(int each:farthest_point) final_answer.insert(each);//将第一次dfs2中全部点转移到final_answer中,并清空最深数据,进行下一次dfs2farthest_point.clear();maxdis=0;for(int i=1;i<=N;i++)visited[i]=0;dfs2(*final_answer.begin(),0);//第二次dfs2&&取出来的是指针,所以要加*//第二次dfs2所得到的最深点也全部放入final_answer中for(int each:farthest_point) final_answer.insert(each);for(int each:final_answer) { cout<<each<<'\n'; }}//经过dfs2之后就会找到以随便找的一个点为起点所能找到的最大深度的终点//再以这些最深终点为起点,再进行一次dfs就可以找到最大深度return 0;
}
PTA-1021-Deepest Root相关推荐
- PAT甲级1021 Deepest Root :[C++题解]树的最大深度、并查集、dfs求树的深度
文章目录 题目分析 题目链接 题目分析 分析: 考察知识点:并查集.dfs.树的深度 给定n个结点,n-1条边,只要能保证只有1个连通分量,就是一棵树.否则的话就不是树,它是不连通的. 用并查集来看是 ...
- 1021. Deepest Root (25)
题目链接:http://www.patest.cn/contests/pat-a-practise/1021 题目: 1021. Deepest Root (25) 时间限制 1500 ms 内存限制 ...
- 浙大PAT 1021. Deepest Root (25)
1021. Deepest Root (25) 时间限制 1500 ms 内存限制 32000 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue A graph ...
- PAT甲级-1021 Deepest Root(25分)
题目:1021 Deepest Root(25分) 分析:找出以某个节点为根时,最深的根,这题可能会超时要用vector来表示二维数组 疑问:代码一是第二次写的超时了,代码二是第一次写的AC了,找不出 ...
- 【分析】1021 Deepest Root (25 分)【DFS解法】
立志用最少的代码做最高效的表达 PAT甲级最优题解-->传送门 A graph which is connected and acyclic can be considered a tree. ...
- 1021 Deepest Root
要解决两大问题: 1. 数包含几个连通分量 2. 如何找到最深结点 注意:connected components的意思是连通分量 问题1我用并查集解决 问题2转化为如何得到每个结点的深度 值得注意之 ...
- 1021 Deepest Root (25 分) 【难度: 中 / 知识点: 树的直径 连通块】
https://pintia.cn/problem-sets/994805342720868352/problems/994805482919673856 方法一: 数组模拟邻接表 第一步: 爆搜df ...
- 【PAT甲级】1021 Deepest Root (25 分)(暴力,DFS)
题意: 输入一个正整数N(N<=10000),然后输入N-1条边,求使得这棵树深度最大的根节点,递增序输出.如果不是一棵树,输出这张图有几个部分. trick: 时间比较充裕数据可能也不是很极限 ...
- 【PAT - 甲级1021】Deepest Root (25分)(并查集,暴力枚举)
题干: A graph which is connected and acyclic can be considered a tree. The height of the tree depends ...
- PTA Deepest Root (25分)
释放无限光明的是人心,制造无边黑暗的也是人心,光明和黑暗交织着,厮杀着,这就是我们为之眷恋又万般无奈的人世间. A graph which is connected and acyclic can b ...
最新文章
- 创建响应式布局的优秀网格工具集锦《系列五》
- SpringCloud:入门介绍
- LeetCode 16 3Sum Closest
- iOS 提交应用过程出现的错误及#解决方案#images can't contain alpha channels or transparencies...
- gentoo.tw的临时解决方法[转贴]
- Java StringBuffer与StringBuider
- java循环停止_什么时候java无限循环停止?
- C++中 static 关键字的作用
- 一层循环时间复杂度_数据结构:二叉排序树的前/中/后序遍历(递归与循环两种版本)...
- 信息学奥赛C++语言:数一数
- CV Code | 本周新出计算机视觉开源代码汇总(含图像修复、目标检测、医学图像分割、度量学习等)...
- 【java】linux命令获取百度的主页-模拟Socket三次握手
- 问题解决 Visual Studio 2015 无法复制文件“D:\swapfile.sys”
- 卡巴斯基许可Key需求登记表
- rdd和DF数据存入MYSQL
- 解决Chrome浏览器中使用showModalDialog返回值为undefined
- BI系统打包Docker镜像及容器化部署的具体实现
- Ubuntu 的护眼软件 :RedShift
- pacman 查询_archlinux pacman常用命令
- (28)部署强命名程序集到GAC
热门文章
- 变声算法实现(基频追踪+SOLA)
- 计算机视觉简介:历史、现状和发展趋势
- Codeforces1389 E. Calendar Ambiguity(数论)
- ldc java_Jvm规范中的LDC_W指令问题?
- 经纬度换算数值_常用经纬度转换
- js闭包循环原因_「js基础」JavaScript入门,难不难你来说
- 国内好用的邮箱评选,电子邮箱大全有你的吗?
- 益聚星荣|网络主播雪梨、林珊珊偷逃税被罚,2个月前已进行立案检查
- 阅读笔记0001之聊聊数据分析现状
- java广度优先爬虫示例_广度优先搜索与网络爬虫