【PAT甲级】1021 Deepest Root (25 分)(暴力,DFS)
题意:
输入一个正整数N(N<=10000),然后输入N-1条边,求使得这棵树深度最大的根节点,递增序输出。如果不是一棵树,输出这张图有几个部分。
trick:
时间比较充裕数据可能也不是很极限,所以用了一个暴力的手段。直接枚举度数为1的点进行深度优先搜索,如果递归了一万次还没有return就当它有环。(这道题的数据不存在只有一个带有自环的部分,即如有自环图必定不止一个)正解应当是dfs一次以后找到一些可能是最深根的叶子结点们,然后对这些叶子节点们依次dfs,再找到对应的一些叶子节点们。成对的叶子结点并且长度最大的就是答案。(最深根一定是成对成对的)(正解待补)
AAAAAccepted code:
#include<bits/stdc++.h>
using namespace std;
vector<int>edg[];
int vis[];
int deg[];
int ans[];
int tmp=;
int mx=;
int num=;
int dfs(int x,int fa){
num++;
if(num>)//断言出现自环,一共只有N个点
return ;
vis[x]=;
++tmp;
mx=max(mx,tmp);
for(auto it:edg[x])
if(it!=fa)
dfs(it,x);
--tmp;
return ;
}
int main(){
int n;
cin>>n;
for(int i=;i<n;++i){
int u,v;
cin>>u>>v;
edg[u].push_back(v);
edg[v].push_back(u);
++deg[u];
++deg[v];
}
int cnt=;
int mxx=;
int flag2=;
for(int i=;i<=n;++i){
tmp=;
mx=;
if(deg[i]==){//叶子结点才可能作为最深根出现
if(!vis[i])
++cnt;
num=;
dfs(i,);
ans[i]=mx;
mxx=max(mxx,mx);
}
}
for(int i=;i<=n;++i)
if(!vis[i]){
num=;
dfs(i,);
++cnt;
}
int flag=;
if(cnt==){
for(int i=;i<=n;++i)
if(ans[i]==mxx){
if(flag)
cout<<"\n";
cout<<i;
flag=;
}
}
else
cout<<"Error: "<<cnt<<" components";
return ;
}
【PAT甲级】1021 Deepest Root (25 分)(暴力,DFS)的更多相关文章
- PAT 甲级 1021 Deepest Root (25 分)(bfs求树高,又可能存在part数part>2的情况)
1021 Deepest Root (25 分) A graph which is connected and acyclic can be considered a tree. The heig ...
- PAT甲级1021. Deepest Root
PAT甲级1021. Deepest Root 题意: 连接和非循环的图可以被认为是一棵树.树的高度取决于所选的根.现在你应该找到导致最高树的根.这样的根称为最深根. 输入规格: 每个输入文件包含一个 ...
- PAT 甲级 1021 Deepest Root (并查集,树的遍历)
1021. Deepest Root (25) 时间限制 1500 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue A graph ...
- PAT 甲级 1021 Deepest Root
https://pintia.cn/problem-sets/994805342720868352/problems/994805482919673856 A graph which is conne ...
- 1021 Deepest Root (25 分)
A graph which is connected and acyclic can be considered a tree. The height of the tree depends on t ...
- [PAT] 1021 Deepest Root (25)(25 分)
1021 Deepest Root (25)(25 分)A graph which is connected and acyclic can be considered a tree. The hei ...
- 1021. Deepest Root (25)——DFS+并查集
http://pat.zju.edu.cn/contests/pat-a-practise/1021 无环连通图也可以视为一棵树,选定图中任意一点作为根,如果这时候整个树的深度最大,则称其为 deep ...
- PAT 甲级 1020 Tree Traversals (25分)(后序中序链表建树,求层序)***重点复习
1020 Tree Traversals (25分) Suppose that all the keys in a binary tree are distinct positive intege ...
- PAT-1021 Deepest Root (25 分) 并查集判断成环和联通+求树的深度
A graph which is connected and acyclic can be considered a tree. The height of the tree depends on t ...
随机推荐
- web项目获取路径
Java获取路径的各种方法: (1).request.getRealPath("/"); //不推荐使用获取工程的根路径 (2).request.getRealPath(requ ...
- leetCode练题——7. Reverse Integer
1.题目: 7. Reverse Integer Given a 32-bit signed integer, reverse digits of an integer. Example 1: I ...
- Flume基础学习
Flume是一款非常优秀的日志采集工具.支持多种形式的日志采集,作为apache的顶级开源项目,Flume再大数据方面具有广泛的应用 首先需要在Flume的解压目录中conf文件夹中将flume-en ...
- 创业学习---《调研黑客上:锁定调研目标》--D-2.调研模块---HHR计划---以太一堂
第一,开始学习: 思考题: (1)你的项目有哪些值得关注的竞争对手?为什么是这些,你是如何分类的? (2)拿出其中一个产品,你会怎么分析他? 第一,<明确调研目标>(补充) 1,调研4大类 ...
- Ubuntu国内镜像
编辑文件:sudo vim /etc/apt/sources.list 全部替换为:如下根据需要替换一个即可,修改保存后记得要执行更新软件包列表命令: sudo apt-get update 一.清华 ...
- leetCode练题——27. Remove Element
1.题目 27. Remove Element——Easy Given an array nums and a value val, remove all instances of that valu ...
- Steam 游戏 《Sudoku Universe(数独宇宙)》、《Sudoku Killer(数独杀手)》、《Sudoku Jigsaw(数独拼图)》数字位置解析 ---------C# 数独程序解析(2020年寒假小目标11)
日期:2020.02.11 博客期:151 星期二 今天,准备肝一个 C# 的数独读写工具(汇编语言也在努力学习命令方法中...),这三个游戏我早就买下了,一直放在 Steam 库里积灰,看着它的成就 ...
- xml配置问题--------不允许有匹配 "[xX][mM][lL]" 的处理指令目标
剪不断,理还乱,是BUG 相遇:不允许有匹配 "[xX][mM][lL]" 的处理指令目标 在编写MyBatic框架时,纯手编写mybatic-config.xml文件,遇 ...
- Springboot学习:日志
介绍 市面上的日志框架: JUL.JCL.Jboss-logging.logback.log4j.log4j2.slf4j.... 日志门面 (日志的抽象层) 日志实现 JCL(Jakarta Com ...
- L3-023 计算图
建立结构体保存每个结点的前驱,操作符,来回两遍拓扑排序~ #include<bits/stdc++.h> using namespace std; ; struct node { vect ...