#include
<
iostream
>
#include
<
stdio.h
>
using
namespace
std;
int
father[
10000001
],num[
10000001
];
/**//*
初始化数组
*/
void
makeset(
int
x){
for
(
int
i
=
0
;i
<=
x;i
++
) { father[i]
=
i; num[i]
=
1
; }}
int
findset(
int
x)
//
查
{
if
(x
!=
father[x]) { father[x]
=
findset(father[x]); }
//
回溯
return
father[x];}
void
Union(
int
a,
int
b)
//
并
{
int
x
=
findset(a);
int
y
=
findset(b);
if
(x
==
y) {
return
; }
if
(num[x]
>=
num[y]) { father[y]
=
x; num[x]
+=
num[y]; }
else
{ father[x]
=
y; num[y]
+=
num[x]; } }
int
main(){
int
n;
while
(scanf(
"
%d
"
,
&
n)
!=
EOF) { makeset(
10000000
);
for
(
int
i
=
1
;i
<=
n;i
++
) {
int
first,second; scanf(
"
%d%d
"
,
&
first,
&
second); Union(first,second); }
int
max
=-
99999
;
for
(
int
i
=
1
;i
<=
10000000
;i
++
) {
if
(num[i]
>
max) max
=
num[i]; } printf(
"
%d\n
"
,max); }
return
0
;}
转载于:https://www.cnblogs.com/cyiner/archive/2011/05/16/2048237.html
转载请注明原文地址: https://mac.8miu.com/read-58436.html