N市民との町があります。人々のいくつかのペアが友達であることが知られています。よると
、AとBが友達である場合、以下のことを「あまりにも、私の友人の友人は私の友達である」という有名
とBとCが友達であるその後、AとCは、あまりにも、友達です。
あなたの仕事は、友人の最大のグループでありますどのように多くの人々数えることです。
入力
入力は、複数のデータセットからなります。入力の最初の行は試験の数の行で構成され
従うケース。
各データセットの最初の行は、Nは、町の数である数NとM、カントー含ま
市民(30000≤1≤N)とMが知られている人(500000≤0≤M)の組の数である
ことが友人。次のM行の各々は二つの整数AとB(1≤A≤N、1≤B≤N、から構成
A及びBが友達であることを説明!= B)。与えられたペアの間で繰り返しがあるかもしれません。
出力
各テストケースの出力は(単独行で)含まれている必要がありますどのように多くの人々表す1数
単独行上の友人の最大のグループであります。
サンプル入力
2
3 2
1 2
2 3
10 12
1 2
3 1
3 4
5 4
3 5
4 6
5 2
2 1
7 1
1 2
9 10
8 9
サンプル出力
3
7
注:Mがゼロであるデータ範囲を。
#include <ビット/ STDC ++ H> 使用して 名前空間STDを、 const int型 MAXN = 10001 ; int型N、M。 int型ANS; int型のp [MAXN]。 int型のCNT [MAXN]。 INT ffind(INT X) { 戻り P [X] == X?X:P [X] = ffind(P [X])。 } ボイドのinit(int型N) { ANS = 1 。 用(int型 iは= 1 ; iが<= N iが++ ) P [i]は = I、CNT [I] = 1; } ボイド uunion(INT U、INT V) { int型 A = ffind(U)。 INT B = ffind(V)。 もし(!= b)は、 P [B] = CNT [A] + = CNT [B]。 ANS = MAX(CNT [A]、ANS)。 } int型のmain() { #ifndefのONLINE_JUDGE freopenは(" in.ini "、" R " 、STDIN)。 #endifの // ONLINE_JUDGE int型T; CIN >>T; 一方、(T-- ) { CIN >> N >> M。 INIT(N)。 int型、B; 用(int型 iは= 0 ; I Mを<Iは++ ) { CIN >> A >> B。 uunion(B) } COUT << ANS << ENDL。 } 戻り 0 。 }