More is better(hdu 1856)
2014-03-13 14:13
429 查看
More is better
[b]TimeLimit: 5000/1000 MS (Java/Others) Memory Limit: 327680/102400 K(Java/Others)Total Submission(s): 4897 Accepted Submission(s):1824
[/b]
[align=left]Problem Description[/align]
Mr Wang wants some boys to help him witha project. Because the project is rather complex,
the more boyscome, the better it will be. Of course there are certainrequirements.
Mr Wang selected a room big enough to hold the boys. The boy whoare not been chosen has to leave the room immediately. There are10000000 boys in the room numbered from 1 to 10000000 at the verybeginning. After Mr Wang's selection any two of them who are stillin
this room should be friends (direct or indirect), or there isonly one boy left. Given all the direct friend-pairs, you shoulddecide the best way.
[align=left]Input[/align]
The first line of the input contains aninteger n (0 ≤ n ≤ 100 000) - the number of direct friend-pairs.The following n lines each contains a pair of numbers A and Bseparated by a single space that suggests A and B are directfriends. (A ≠ B, 1 ≤ A, B ≤
10000000)
[align=left]Output[/align]
The output in one line contains exactlyone integer equals to the maximum number of boys Mr Wang maykeep.
[align=left]Sample Input[/align]
4 1 2 3 4 56 1 6 4 1 2 3 4 5 6 7 8
[align=left]Sample Output[/align]
4 2
Hint
A and B are friends(direct or indirect), B and C are friends(director indirect), then A and C are also friends(indirect). In the firstsample {1,2,5,6} is the result. In the second sample{1,2},{3,4},{5,6},{7,8} are four kinds of answers.
[align=left]Author[/align]
lxlcrystal@TJU
[align=left]Source[/align]
HDU 2007 Programming Contest - Final
[align=left]Recommend[/align]
lcy
#include<stdio.h> #define MAX 10000000 long pre[MAX]; long num[10000010]; long find(long x){ return pre[x] == x ? x: pre[x] =find(pre[x]); } void marge(long a, long b){ long x = find(a); long y = find(b); if(x != y){ pre[x] = y; } } long count (){ long i, max = 0 ; for (i = 1 ; i <= 10000000 ; i++)num[i] = 0 ; for (i = 1 ; i <= 10000000 ; i++)num[find(i)]++ ; for (i = 1 ; i <= 10000000 ; i++)if (num[i] > max) max = num[i] ; return max ; } int main(){ long n, p1, p2, i, max = 0, j, cnt; while(scanf("%ld", &n) !=EOF){ for(i = 1; i <=MAX; i++) pre[i] =i; i = 1; while(i <=n){ scanf("%ld%ld",&p1, &p2); if(find(p1)!= find(p2)){ marge(p1,p2); } i++; } printf("%ld\n", count()); } return 0; }
相关文章推荐
- hdu 1856 More is better(并查集)
- HDU 1856 more is better (简单题)
- Graph Theory NO.4 HDU_1856_More is better_并查集
- hdu 1856 More is better
- [HDU 1856] More is better
- hdu 1856 More is better
- HDU 1856 More is better
- HDU 1856 More is better(越多越好,并查集,节点的个数)
- hdu 1856 More is better
- HDU 1856 More is better
- HDU 1856 More is better
- HDU 1856 More is better (并查集)
- HDU 1856 More is better
- HDU 1856 More is better
- HDU 1856 More is better
- 【并查集】hdu 1856 More is better
- hdu 1856 More is better (并查集)
- hdu 1856 (More is better)
- hdu 1856 More is better (究级版)
- HDU - 1856 More is better 并查集