HDU1865--More is better(统计并查集的秩(元素个数))

More is better

Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 327680/102400 K (Java/Others)
Total Submission(s): 25168    Accepted Submission(s): 9045

Problem Description

Mr Wang wants some boys to help him with a project. Because the project is rather complex, the more boys come, the better it will be. Of course there are certain requirements.

Mr
Wang selected a room big enough to hold the boys. The boy who are not
been chosen has to leave the room immediately. There are 10000000 boys
in the room numbered from 1 to 10000000 at the very beginning. After Mr
Wang‘s selection any two of them who are still in this room should be
friends (direct or indirect), or there is only one boy left. Given all
the direct friend-pairs, you should decide the best way.

Input

The
first line of the input contains an integer n (0 ≤ n ≤ 100 000) - the
number of direct friend-pairs. The following n lines each contains a
pair of numbers A and B separated by a single space that suggests A and B
are direct friends. (A ≠ B, 1 ≤ A, B ≤ 10000000)

Output

The output in one line contains exactly one integer equals to the maximum number of boys Mr Wang may keep.

Sample Input

4
1 2
3 4
5 6
1 6
4
1 2
3 4
5 6
7 8

Sample Output

4
2

Hint

A and B are friends(direct or indirect), B and C are friends(direct or indirect),
then A and C are also friends(indirect).

In the first sample {1,2,5,6} is the result.
In the second sample {1,2},{3,4},{5,6},{7,8} are four kinds of answers.

Author

[email protected]

Source

HDU 2007 Programming Contest - Final

这道题目需要统计并查集的秩

只需要加一个数组记录根节点的秩, 然后在合并时, 顺带着将秩也合并即可

 1 #include <cstdio>
 2 #include <cstdlib>
 3 #include <climits>
 4
 5 const int MAX = 10000005;
 6 int pre[MAX],rank[MAX],maxx;
 7
 8
 9 void init(){
10     int i;
11     for(i=1;i<MAX;++i){
12         pre[i] = i;
13         rank[i] = 1;
14     }
15 }
16
17 int root(int x){
18     if(x!=pre[x]){
19         pre[x] = root(pre[x]);
20     }
21     return pre[x];
22 }
23
24 void merge(int x,int y){
25     int fx = root(x);
26     int fy = root(y);
27     if(fx!=fy){
28         pre[fx] = fy;
29         rank[fy] += rank[fx];//更改对应元素的秩
30         if(rank[fy]>maxx)maxx = rank[fy];//更新最大值
31     }
32 }
33
34
35 int main(){
36     //freopen("in.txt","r",stdin);
37     int i,n,x,y;
38     while(scanf("%d",&n)!=EOF){
39         if(n==0){
40             printf("1\n");
41             continue;
42         }
43         init();
44         maxx = INT_MIN;
45         for(i=0;i<n;++i){
46             scanf("%d %d",&x,&y);
47             merge(x,y);
48         }
49         printf("%d\n",maxx);
50     }
51     return 0;
52 }
时间: 2024-12-28 16:07:18

HDU1865--More is better(统计并查集的秩(元素个数))的相关文章

More is better(hdu 1856 计算并查集集合中元素个数最多的集合)

More is better Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 327680/102400 K (Java/Others)Total Submission(s): 21167    Accepted Submission(s): 7720 Problem Description Mr Wang wants some boys to help him with a project. Because the project

hdu--1231--并查集&lt;连分量的个数&gt;

我觉得 这题 是纯粹的 并查集 可以算成 入门题吧 问你有几章桌子 就是问你有几个 连通块嘛 一个道理 touch  me 这题 我采用了下 father[x]开始 初始化为-1 1 #include <iostream> 2 #include <cstring> 3 using namespace std; 4 5 const int size = 1010; 6 int father[size]; 7 8 int find( int x ) 9 { 10 return fath

POJ 1611 The Suspects (并查集+数组记录子孙个数 )

The Suspects Time Limit: 1000MS   Memory Limit: 20000K Total Submissions: 24134   Accepted: 11787 Description Severe acute respiratory syndrome (SARS), an atypical pneumonia of unknown aetiology, was recognized as a global threat in mid-March 2003. T

HDU 1811 Rank of Tetris(并查集按秩合并+拓扑排序)

Rank of Tetris Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 9267    Accepted Submission(s): 2668 Problem Description 自从Lele开发了Rating系统,他的Tetris事业更是如虎添翼,不久他遍把这个游戏推向了全球. 为了更好的符合那些爱好者的喜好,Lele又想

BC68(HD5606) 并查集+求集合元素

tree Accepts: 143 Submissions: 807 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) 问题描述 有一个树(nn个点, n-1n−1条边的联通图),点标号从11~nn,树的边权是00或11.求离每个点最近的点个数(包括自己). 输入描述 第一行一个数字TT,表示TT组数据. 对于每组数据,第一行是一个nn,表示点个数,接下来n-1n−1,每行三个整数u,

CSUOJ 1601 War (离线并查集求连通块个数)

1601: War Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 130  Solved: 38 [Submit][Status][Web Board] Description AME decided to destroy CH's country. In CH' country, There are N villages, which are numbered from 1 to N. We say two village A and B ar

BZOJ4025 二分图 分治 并查集 二分图 并查集按秩合并 带权并查集

原文链接http://www.cnblogs.com/zhouzhendong/p/8683831.html 题目传送门 - BZOJ4025 题意 有$n$个点,有$m$条边.有$T$个时间段.其中第$i$条边连接节点$x_i,y_i$,并且在$start_i$时刻出现,在$end_i$时刻消失.问每一个时刻的图是不是二分图. $n\leq 10^5,m\leq 2\times 10^5,T\leq 10^5$ 题解 真是一道好题. 做这题我才发现我从来没写过按秩合并的并查集QAQ. 先考虑按

并查集-按秩合并

1239: 中山学院 ACM小组 Time Limit: 1 Sec  Memory Limit: 64 MB Submit: 79  Solved: 21 [Submit][Status][Web Board] Description 经过几年的发展,中山学院 ACM队伍越来越庞大,水平越来越高,影响力也越来越大.随着人员数量的壮大,为了营造一个良好的队内之间沟通讨论氛围,教练组决定让队员之间以小组的形式进行讨论.而教练组又希望所有认识的人都在同一组里面讨论,以提高大家的积极性.而这里的认识可

SPOJ:Lost and survived(multiset+并查集)

On September 22, 2004, Oceanic Flight 815 crashed on a mysterious island somewhere in the pacific. There actually were survivors in the crash , N survivors . The mysterious island kept on moving in space - time, so no rescue reached them. Initially e