1021 Deepest Root

news/2024/7/1 10:29:08

要解决两大问题:

1. 数包含几个连通分量

2. 如何找到最深结点

注意:connected components的意思是连通分量

问题1我用并查集解决

问题2转化为如何得到每个结点的深度

值得注意之处是对于问题2来说,下图是测试用例1给出的树

可以看出从1出发得到5的深度是3

从3出发得到5的深度是4

 ……

以每个结点为根节点开始遍历,会得到每个结点的一个深度,而我们只需要维护每个结点的最大深度。(如果不是这样,而是记录每个深度再排序,二维整型列表会导致内存超限)

AC代码

#include<cstdio>
#include<vector>
#include<iostream>
#include<algorithm>
#include<queue>
#include<map>
#include<set>using namespace std;const int maxn = 10010;vector<int> G[maxn];int F[maxn] = {0};int n;int ccnum = 0;//连通分量的个数 vector<int> cc[maxn]; int seekr(int x){int a = x;while(F[x]!=x){x = F[x];}while(F[a]!=a){int z = a;F[z] = x;a = F[a];}return x;
}void unite(int a,int b){int ra = seekr(a);int rb = seekr(b);if(ra!=rb)F[ra] = rb;return;
}int vis[maxn] = {0};int maxLen = 0;int L[maxn] = {0};//1:no 2:rootvoid DFS(int no,int len,int start){vis[no] = 1;if(len>L[no])L[no] = len;for(int i=0;i<G[no].size();i++){int next = G[no][i];if(vis[next]==0){DFS(next,len+1,start);}}return;		
}int main(){ cin>>n;for(int i=0;i<n-1;i++){int v1,v2;cin>>v1>>v2;G[v1].push_back(v2);G[v2].push_back(v1);if(F[v1]==0)F[v1] = v1;if(F[v2]==0)F[v2] = v2;unite(v1,v2);}for(int i=1;i<=n;i++){int r = seekr(i);if(cc[r].size()==0){ccnum ++;cc[r].push_back(i);}}if(ccnum>1){printf("Error: %d components",ccnum);return 0;}for(int i=1;i<=n;i++){fill(vis,vis+n+1,0);DFS(i,1,i);}vector<int> roots;int maxLen = 0;for(int i=1;i<=n;i++){if(L[i]>maxLen){maxLen = L[i];roots.clear();roots.push_back(i);}else if(L[i]==maxLen){roots.push_back(i);}}sort(roots.begin(),roots.end());for(int i=0;i<roots.size();i++){printf("%d\n",roots[i]);}return 0;
}


http://lihuaxi.xjx100.cn/news/240877.html

相关文章

consul安装配置使用

2019独角兽企业重金招聘Python工程师标准>>> 环境 centos:7.3 docker:1.12.6 kernel:3.10.0-514.6.1.el7.x86_64 consul:0.8.1 server1:10.1.13.221 server2:10.1.13.222 consul的功能 服务发现 健康检查 支持多数据中心 key/value存储 consul的使用场景 docker实例…

警惕!国内某广告SDK内置“后门”功能,Google Play商店已强制下架

本文讲的是警惕&#xff01;国内某广告SDK内置“后门”功能&#xff0c;Google Play商店已强制下架&#xff0c;新闻摘要 Lookout安全团队近日发现了个信的广告软件开发工具包&#xff08;SDK&#xff09;&#xff0c;可以通过下载恶意插件&#xff0c;借助其他合法app对用户实…

java 冒泡排序和快速排序 实现

面试的时候经常会遇到面试官让你直接手写排序算法&#xff0c;下面是冒泡排序和快速排序的实现。冒泡排序基本流程就是&#xff0c;自下而上比较相邻的两个元素进行比较&#xff0c;让大的元素往下面沉&#xff0c;较小的往上冒。按照排序规则进行比较&#xff0c;如果是跟排序…

[转]语音识别中区分性训练(Discriminative Training)和最大似然估计(ML)的区别...

转&#xff1a;http://blog.sina.com.cn/s/blog_66f725ba0101bw8i.html关于语音识别的声学模型训练方法已经是比较成熟的方法&#xff0c;一般企业或者研究机构会采用HTK工具包、Kaldi等进行训练&#xff0c;目前从声学模型出发&#xff0c;提高系统性能的主要策略主要有&#…

1145 Hashing - Average Search Time

目录 思路 样例解释 AC代码 思路 要做出这道题必须直到除留余数法和平方探测法的原理。 除此之外有两个注意点&#xff1a; 1. 在查找时&#xff0c;如果当前位置上不是要找的数会继续找下去(如果k没超过表长的话)&#xff0c;但是如果当前位置上是0&#xff0c;说明表里…

[ExtJS5学习笔记]第五节 使用fontawesome给你的extjs5应用添加字体图标

本文地址&#xff1a;http://blog.csdn.net/sushengmiyan/article/details/38458411本文作者&#xff1a;sushengmiyan-------------------------------------------------资源链接--------------------------------------------------------FontAwesome glyph编码&#xff1a;…

Equifax再陷风波:一门户网站管理员密码是admin/admin

据外媒报道&#xff0c;又一个Equifax门户网站被指存在安全协议问题。最先发现这个的Hold Security LLC指出&#xff0c;一个负责管理信用报告纠纷&#xff08;内含个人信息&#xff09;的新Equifax门户网站使用的是用户名和密码都为admin的用户名/密码数字通道。该门户网站叫V…