牛客网练习赛24B 凤凰

题目链接

时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 262144K,其他语言524288K
64bit IO Format: %lld

题目描述

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

输入描述:
第一行有一个正整数n,表示百鸟国节点个数。
接下来n-1行,第i行两个正整数ai,bi用空格隔开,表示树上节点ai,bi之间有一条边。
输出描述:
第一行一个整数,表示集合最少需要的时间。
示例1
输入

3
1 2
2 3

输出

2

示例2
输入

3
1 2
1 3

输出

1

示例3
输入

4
1 2
2 3
2 4

输出

3

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


该题为只需要计算根节点的直接子树中最大的节点数即可,所以可以用并查集进行分类
由于数据量较大,不能用scanner输入,这里采用BufferedReader读入
ac代码

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Scanner;

public class Main {
	public static void main(String args[]) throws IOException {
		BufferedReader sc = new BufferedReader(new InputStreamReader(System.in));
		int n = Integer.parseInt(sc.readLine());
		int bc[] = new int [1000005];
		while(--n>0) {
			String s[] = sc.readLine().split(" ");
			int a = Integer.parseInt(s[0]);
			int b = Integer.parseInt(s[1]);
			if(a!= 1&&b!=1) {
				u(a,b,bc);
			}
		}
		int max = -1;
		max = max(bc);
		System.out.println(-max);
	
	}

	private static int max(int[] bc) {
		int max=0;
		for(int i = 0;i<=1000000;i++) {
			if(max>bc[i]) {
				max = bc[i];
			}
		}
		return max;
	}
	
	private static int find(int a, int bc[]) {
		if(bc[a] == 0) {
			bc[a] = -1;
			return a;
		}else if(bc[a]<0) {
			return a;
		}else {
			return find(bc[a],bc);
		}
	}
	private static void u(int a, int b, int bc[]) {
		int ra = find(a, bc);
		int rb = find(b, bc);
		if(ra != rb) {
			if(bc[ra]<bc[rb]) {
				bc[ra] = bc[ra]+bc[rb];
				bc[rb] = ra;
			}else {
				bc[rb] = bc[ra]+bc[rb];
				bc[ra] = rb;
			}
		}
	}

}

全部评论

相关推荐

不愿透露姓名的神秘牛友
07-01 17:00
点赞 评论 收藏
分享
我是没经验的毕业生,这啥情况啊会不会是hr在刷kpi
JamesGosli...:字节boss属于是群发了,我都快入职字节了,其他部门还在和我boss打招呼
点赞 评论 收藏
分享
06-27 12:54
已编辑
门头沟学院 Java
累了,讲讲我的大学经历吧,目前在家待业。我是一个二本院校软件工程专业。最开始选专业是觉得计算机感兴趣,所以选择了他。本人学习计算机是从大二暑假结束开始的,也就是大三开始。当时每天学习,我个人认为Java以及是我生活的一部分了,就这样持续学习了一年半,来到了大四上学期末,大概是在12月中旬,我终于找的到了一家上海中厂的实习,但我发现实习生的工作很枯燥,公司分配的活也不多,大多时间也是自己在自学。就这样我秋招末才找到实习。时间来到了3月中旬,公司说我可以转正,但是转正工资只有7000,不过很稳定,不加班,双休,因为要回学校参加答辩了,同时当时也是心高气傲,认为可以找到更好的,所以放弃了转正机会,回学校准备论文。准备论文期间就也没有投递简历。然后时间来到了5月中旬,这时春招基本也结束了,然后我开始投递简历,期间只是约到了几家下场面试。工资也只有6-7k,到现在我不知道该怎么办了。已经没有当初学习的心劲了,好累呀,但是又不知道该干什么去。在家就是打游戏,boss简历投一投。每天日重一次。26秋招都说是针对26届的人,25怎么办。我好绝望。要不要参加考公、考研、央国企这些的。有没有大佬可以帮帮我。为什么感觉别人找工作都是顺其自然的事情,我感觉自己每一步都在艰难追赶。八股文背了又忘背了又忘,我每次都花很长时间去理解他,可是现在感觉八股、项目都忘完了。真的已经没有力气再去学习了。图片是我的简历,有没有大哥可以指正一下,或者说我应该走哪条路,有点不想在找工作了。
码客明:太累了就休息一下兄弟,人生不会完蛋的
如果实习可以转正,你会不...
点赞 评论 收藏
分享
06-07 19:59
门头沟学院 C++
补药卡我啊😭:都快15年前的了还在11新特性
你的简历改到第几版了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务