1021 Deepest Root
要解决两大问题:
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;
}
相关文章:

一段处理百分数的js代码
function percent(s, e, i){s Number(s), isNaN(s) && (s "0");var n "%";return e !1 && (n ""), parseFloat((100 * s).toFixed(i)) n } s 需要处理的数字 e 是否显示百分号(%) true 或 false i 保留几位小数 转载于:h…

js字符串如何倒序
1. var reverse function( str ){ var newStr , i str.length; for(; i > 0; i--) { newStr str.charAt(i); } return newStr; };reverse(abcde) 2. var reverse function( str ){ return str.split().reverse().join(); }; 3.(类似法2) var rev…

Windows Phone 7 Tip (4) -- User Agent
The user agent for IE on Windows Phone 7 running on the Asus Galaxy device is:Mozilla/4.0 (compatible; MSIE 7.0; Windows Phone OS 7.0; Trident/3.1; IEMobile/7.0) Asus;Galaxy6 source转载于:https://www.cnblogs.com/midshipman/archive/2010/04/29/1723416.html

vs2010 学习Silverlight学习笔记(7):控件样式与模板
概要: 终于知道Silverlight——App.xaml是干什么用的了,不仅可以用来封装样式(类似css),还可以制定控件模版。。。好强大的功能啊。 封装: 继续学习《一步一步学Silverlight 2系列(8)…

MinGW-notepad++开发c/c++程序
下载MinGW 点击下载 安装好后运行 最后点击左上角的 Installation,开始安装 1.编译: g -o a.exe a.cpp gcc -o hello.exe hello.c 2.运行: ./a.exe 转载于:https://www.cnblogs.com/feilongblog/p/4315636.html

re:Invent大会第四天:为什么Lambda值得你更多关注?
2018年11月29日的拉斯维加斯,AWS re:Invent大会进入第四天,上午照例由AWS CTO Werner Vogels带来主题演讲。 从主题演讲之前到主题演讲之后,改变最大的产品毫无疑问就是Lambda,有至少8个相关的最新发布。Vogels在2014年正式对外发…

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

C#和Java的闭包-Jon谈《The Beauty of Closures》
第一段略。。。 大多数讲闭包的文章都是说函数式语言,因为它们往往对闭包的支持最完善。当你在使用函数式语言时,很可能已经清楚了解了什么是闭包,所以我想写一篇在经典OO语言出现的闭包有什么用处应该也是很合适的事情。这篇文章我准备讲一下…

谷歌浏览器输入框背景颜色变黄的解决方案
2019独角兽企业重金招聘Python工程师标准>>> input:-webkit-autofill, input:-webkit-autofill:hover, input:-webkit-autofill:focus { box-shadow:0 0 0 60px #eee inset; -webkit-text-fill-color: #878787; } 转载于:https://my.oschina.net/kitty0107/blog/296…

男人最不该做的7件事
1.没有目标 2.浪费时间 3.不独立 4.被动地活着 5.不规划自己的人生 6.不学习吸收信息 7.不接受爱情转载于:https://www.cnblogs.com/jiu0821/p/4315660.html

1085 Perfect Sequence
明确题目的核心是要找到 找到第一个满足 M > m*p 的M的下标。然后用该下标减去起点的下标即为序列元素个数。 二分区间应当是M所有可能的取值范围。起点是i1,终点是N而不是N-1,虽然A[N]上无元素。注意啊,原题要找的M是小于等于m*p的&…

[笔记]Go语言在Linux环境下输出彩色字符
Go语言要打印彩色字符与Linux终端输出彩色字符类似,以黑色背景高亮绿色字体为例: fmt.Printf("\n %c[1;40;32m%s%c[0m\n\n", 0x1B, "testPrintColor", 0x1B) 其中0x1B是标记,[开始定义颜色,1代表高亮…

javascript中this那些事
定义 this是函数执行的上下文。 调用方式 1. 作为函数调用,指向window(严格模式报undefined的错)。 var namehello; function a() { console.log(this.name) } a(); //hellovar c{ name:haha, d: function(){ a(); } } c.d(…

java序列化的作用-这个挺有用的,不妨学学
http://bbs.tech.ccidnet.com/read.php?tid249048 最近在阅读Core J2EE Patterns 的时候发现例子里用于在各个层次里进行传输的TO(Data Transfer Object)都实现了java.io.Serializable接口,看到这些偶突然感到茅塞顿开~困扰了很久…

二分法典例:木棒切割问题
Input : 输入木棒根数n,要得到的等长木棒数量K,以及n根木棒的长度。 Output : 等长木棒的最大长度。 用二分法求解这道题,首先要找到以得到的等长木棒数量为因变量、等长木棒长度为自变量函数。 int getK(int l){//随着l增大,返…

对Android 开发者有益的 40 条优化建议(转)
下面是开始Android编程的好方法: 找一些与你想做事情类似的代码 调整它,尝试让它做你像做的事情 经历问题 使用StackOverflow解决问题对每个你像添加的特征重复上述过程。这种方法能够激励你,因为你在保持不断迭代,不经意中你学到…

英语语法总结--连词
连词 连词是一种虚词, 它不能独立担任句子成分而只起连接词与词,短语与短语以及句与句的作用。连词主要可分为两类:并列连词和从属连词。并列连词用来连接平行的词、词组和分 句。如:and, but, or, nor, so, therefore, yet, howe…

开放平台鉴权以及OAuth2.0介绍
OAuth 2.0 协议 OAuth是一个开发标准,允许用户授权第三方网站或应用访问他们存储在另外的服务提供者上的信息,而不需要将用户名和密码提供给第三方网站或分享他们数据的内容。OAuth 2.0不兼容1.0。协议的参与者 RO (resource owner): 资源所有者…

1044 Shopping in Mars
这题我写了两个二分函数。 BS借用的模板是找到第一个大于等于总价的商品下标,然后返回的是钻石价值和减去商品总价,通过遍历来得到最小的差值,注意遍历的最后一个数字的时候可能会返回负值,所以只有当返回值大于等于0才可以用来竞…

nodeJS之eventproxy源码解读
1.源码缩影 !(function (name, definition) { var hasDefine typeof define function, //检查上下文环境是否为AMD或CMD hasExports typeof module ! undefined && module.exports; //检查上下文环境是否为Node if (hasDefine) { define(definition); //AMD环境或CM…

解决phpmyadmin3.4空密码登录被禁止登陆的方法
很多时候我们在本机测试时会将root用户密码设置为空。因为我把php升级到了5.3.1,以前的phpmyadmin版本不能用了,就升级到phpMyAdmin 3.2.4版的时候,会遇到无法以空密码登录root用户的情况。怎么解决呢? 请参照如下步骤: 1、打开程…

CentOS安装新版RabbitMQ解决Erlang 19.3版本依赖
2019独角兽企业重金招聘Python工程师标准>>> 通过yum等软件仓库都可以直接安装RabbitMQ,但版本一般都较为保守。 RabbitMQ官网提供了新版的rpm包(http://www.rabbitmq.com/download.html),但是安装的时候会提示需要erl…

1048 Find Coins(二分法解法)
非常基础的二分法-寻找序列中是否存在某一条件的元素 的应用 AC代码 #include<cstdio> #include<iostream> #include<set> #include<vector> #include<map> #include<algorithm>using namespace std;const int SUP 100000000; const in…

关于chrome等浏览器不支持showModalDialog的解决方案
目前,新版本的chrome和opera、Firefox等浏览器已经不支持showModalDialog方法。 如果是没有接收返回值的,可以直接将window.showModalDialog改为window.open。 需要接收返回值的情况: 父页面设置: var uIdName; function chooseus…

Flex Javascript 交互实现代码
关键字:ExternalInterface所用类库:SWFObject/*** Flex调用Javascript函数* params functionName:String Javascript函数名称* params ...params Javascript函数参数* return 返回Javascript函数的return内容**/ExternalInterface.call(functionName:Str…

C#反射使用时注意BindingFlags的用法(转载)
最近刚刚开始用反射做项目,遇到一个小的知识点,记录一下。 c#反射查找方法时,默认只能查到public方法。如果想要查找private方法,需要设定BindingFlags. 即: BindingFlags.Public|BindingFlags.Instance 默认…

1126 Eulerian Path
主要考英语或者数学基础。 一幅连通图的奇点个数为0或2时才能够被一笔画。 连通图的判断用DFS来计数。 连通图0个奇点:Eulerian 连通图2个奇点:semi-Eulerian 非连通图/连通图其他数量的奇点:non-Eulerian AC代码 #include<cstdio&…

各种小的 dp (精)
Q~ 抛一枚硬币 n 次,每次可能是正面或者反面向上,求没有连续超过 k 次硬币向上的方案数 A : dp[ i ] 表示到 i 位置的方案数, 1 . 当 i < k 时, dp[i] dp[i-1]*2 2 . 当 i k 时, dp[i] dp[i-1]*2 - 1…

写给还在大学的兄弟姐妹
看到软件专业毕业生之一个月攻略 这篇文章之后,忽然想起了自己两个多月前找工作时的写的一篇文章,便拿出来与大家分享。这仅是个人的一些看法,不正确之处还请各位指出,有砖尽管拍。 基础很重要 许多企业招聘,要求大学…