牛客-牛客练习赛24-B 凤 凰

链接:https://www.nowcoder.com/acm/contest/157/B
来源:牛客网
 

题目描述

    凤凰于飞,翙翙其羽,亦集爰止。

                                        ——《诗经·卷阿》

    传说,凤凰是百鸟之王。有一天,凤凰要召开百鸟大会,百鸟国是一个由n个节点组成的树,每个节点有一只鸟,开会的节点定在1号节点。每只鸟可以花费1s通过一条边,由于每根树枝(边)的载重有限,只允许一只鸟同时通过。作为会议的策划师,HtBest想知道百鸟国的所有鸟在1点集合最少需要多少秒。

 

输入描述:

第一行有一个正整数n,表示百鸟国节点个数。
接下来n-1行,第i行两个正整数ai,bi用空格隔开,表示树上节点ai,bi之间有一条边。

输出描述:

第一行一个整数,表示集合最少需要的时间。

备注:

对于100%的测试数据:
1 ≤ n ≤ 1000000
数据量较大,注意使用更快的输入输出方式。

 

思路:对于与1相连的各个子节点 ai 之间是没有联系的,可以分开讨论,对于ai所在的子树,其与节点1只有一条边可到达,而所有的点都可以同时去往他的父亲节点上,这就相当于在 ai节点上一直都有点在,因此ai所在的子树到节点1的最大时间就是子树的节点总个数,而到节点1的最大时间就是与1相连的ai所在子树的节点数的最大值。

Code :

#include<iostream>
using namespace std;

const int MAX_N=1000005;
int n,ans;
int id[MAX_N],d[MAX_N];

int Find(int x)
{
	if(id[x]!=x)	id[x]=Find(id[x]);
	return id[x];
}
int main()
{
	ios::sync_with_stdio(false);
	for(int i=0;i<MAX_N;++i)
		id[i]=i;
	cin>>n;
	int u,v;
	for(int i=1;i<n;++i)
	{
		cin>>u>>v;
		if(u!=1&&v!=1)	id[Find(u)]=Find(v);
	}
	for(int i=1;i<=n;++i)
		++d[Find(i)];
	for(int i=1;i<=n;++i)
		ans=max(ans,d[i]);
	cout<<ans<<endl;
	
	return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值