PAT甲题题解-1021. Deepest Root (25)-dfs+并查集
dfs求最大层数
并查集求连通个数
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <string.h>
#include <string>
#include <vector>
using namespace std;
/*
dfs求最大层数
并查集求连通个数
*/
const int maxn=+;
int n;
int anslayer=; //最大层数
vector<int>deeproot;
int maxlayer; //保存当前dfs的最大层数
int vis[maxn];
//并查集
struct UF{
int fa[maxn];
void init(){
for(int i=;i<maxn;i++)
fa[i]=i;
}
int find_root(int x){
if(fa[x]!=x)
fa[x]=find_root(fa[x]);
return fa[x];
}
void Union(int x,int y){
int fx=find_root(x);
int fy=find_root(y);
if(fx!=fy){
fa[fy]=fx;
}
} }uf; //链式前向星建立边
int head[maxn];
int tot;
struct Edge{
int to;
int next;
}edge[maxn*]; int init(){
memset(head,-,sizeof(head));
tot=;
} void add(int u,int v){
edge[tot].to=v;
edge[tot].next=head[u];
head[u]=tot++;
} void dfs(int u,int layer){
bool flag=true;
vis[u]=;
for(int k=head[u];k!=-;k=edge[k].next){
int v=edge[k].to;
if(!vis[v]){
flag=false;
//vis[v]=1;
dfs(v,layer+);
} }
//到叶子节点了
if(flag){
if(layer>maxlayer)
maxlayer=layer;
}
}
int main()
{
int u,v;
scanf("%d",&n);
init();
uf.init();
for(int i=;i<n-;i++){
scanf("%d %d",&u,&v);
add(u,v);
add(v,u);
uf.Union(u,v);
} memset(vis,,sizeof(vis));
for(int i=;i<=n;i++){
int f=uf.find_root(i);
vis[f]=;
}
int cnt=;
for(int i=;i<=n;i++){
if(vis[i]==)
cnt++;
}
if(cnt>){
printf("Error: %d components\n",cnt);
}
else{
for(int i=;i<=n;i++){
maxlayer=;
memset(vis,,sizeof(vis));
//printf("dfs %d\n",i);
dfs(i,);
if(maxlayer>anslayer){
anslayer=maxlayer;
deeproot.clear();
deeproot.push_back(i);
}
else if(maxlayer==anslayer){
deeproot.push_back(i);
}
}
sort(deeproot.begin(),deeproot.end());
for(int i=;i<deeproot.size();i++){
printf("%d\n",deeproot[i]);
}
}
return ;
}
PAT甲题题解-1021. Deepest Root (25)-dfs+并查集的更多相关文章
- 1021. Deepest Root (25)——DFS+并查集
http://pat.zju.edu.cn/contests/pat-a-practise/1021 无环连通图也可以视为一棵树,选定图中任意一点作为根,如果这时候整个树的深度最大,则称其为 deep ...
- PAT甲题题解-1114. Family Property (25)-(并查集模板题)
题意:给出每个人的家庭成员信息和自己的房产个数与房产总面积,让你统计出每个家庭的人口数.人均房产个数和人均房产面积.第一行输出家庭个数,随后每行输出家庭成员的最小编号.家庭人口数.人均房产个数.人均房 ...
- PAT甲题题解-1126. Eulerian Path (25)-欧拉回路+并查集判断图的连通性
题目已经告诉如何判断欧拉回路了,剩下的有一点要注意,可能图本身并不连通. 所以这里用并查集来判断图的联通性. #include <iostream> #include <cstdio ...
- 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 ...
- PAT甲题题解-1130. Infix Expression (25)-中序遍历
博主欢迎转载,但请给出本文链接,我尊重你,你尊重我,谢谢~http://www.cnblogs.com/chenxiwenruo/p/6789828.html特别不喜欢那些随便转载别人的原创文章又不给 ...
- PAT甲题题解-1051. Pop Sequence (25)-堆栈
将1~n压入最多为m元素的栈 给出k个出栈序列,问你是否能够实现. 能输出YES 否则NO 模拟一遍即可,水题. #include <iostream> #include <cstd ...
- PAT甲题题解-1059. Prime Factors (25)-素数筛选法
用素数筛选法即可. 范围long int,其实大小范围和int一样,一开始以为是指long long,想这就麻烦了该怎么弄. 而现在其实就是int的范围,那难度档次就不一样了,瞬间变成水题一枚,因为i ...
- PAT甲题题解-1101. Quick Sort (25)-大水题
快速排序有一个特点,就是在排序过程中,我们会从序列找一个pivot,它前面的都小于它,它后面的都大于它.题目给你n个数的序列,让你找出适合这个序列的pivot有多少个并且输出来. 大水题,正循环和倒着 ...
- PAT甲题题解-1117. Eddington Number(25)-(大么个大水题~)
如题,大水题...贴个代码完事,就这么任性~~ #include <iostream> #include <cstdio> #include <algorithm> ...
随机推荐
- unity StrangeIoc
已经很久没有写博客,主要原因还是自我荒废了太久,在学习上失去了动力.最近来新的公司实习,以前都是做项目的开发,现在被调到框架组,主要从事的是框架维护还有开发.学习了许多新的知识还有优秀的框架,今天就写 ...
- Gitkraken的使用
一个优秀的团队合作离不开git,一个优秀的程序员也离不开git.gitkraken是我在进行软工实践这门课接触到的git的UI界面的工具,它给我留下的印象就是非常好用和方便 怎么个方便法呢? 方便的安 ...
- saltstack二次开发(二)
Saltstack的api Salt-api有两种方式,一种是函数的形式,有人家定义好的函数,我们可以直接调用,直接写python代码调用函数或者类就可以了.第二种形式是salt-api有封装好的ht ...
- openlayers5实战--踩坑总结
1.接口返回圆心坐标和半径,直接通过new Circle(center,radius)添加圆形feature变小问题. 解决办法: new Feature()的geometry参数不能直接赋值new ...
- Netty入门(五)ChanneHandler
本节主要讨论了 Netty 的数据处理组件 ChannelHandler. 一.Channel 生命周期 Channel 有个简单但强大的状态模型,下面是 Channel 的四个状态: Channel ...
- 关于ip判断
php正则实现ip段判断 $ip = '22.18.10.2'; $arrayip = array('123.12.*.*','22.18.10.*');//ip段 $ipregexp = implo ...
- 漫画:什么是HashMap?
漫画系列摘抄自程序员小灰的博客https://blog.csdn.net/bjweimengshu/article/list/3?t=1 ------------------------------- ...
- WebAPI项目中使用SwaggerUI
1.创建webapi项目解决方案 2.引入Swagger组件 在项目引用中可以看到swagger的引用 3.webapi 项目右键属性->生成-> 勾选XML文档文件,然后将XML文件保存 ...
- PNS settings
Before PNS,some settings should be ready: firstly,make sure that the power/ground nets exist,if not, ...
- Python2.7-collections
collections 模块主要提供了五种特殊类型容器,此外还提供了许多抽象基类用于检查类的接口 1.Counter 对象,主要用于统计出现次数,是dict的一个子类,用法与形式和 dict 很类似 ...