問題の説明
Nの住民と町があります。もちろん、人の多くは、関係の友人です。有名な諺によると:「私の友人の友人は私の友人で、」AとBが友達であるので、もし、BとCは、AとCも友達で、友達です。あなたの仕事は、多くの人々にこの町の友人で最大のグループを計算することです。
入力形式
入力ファイルの最初の行は、2つの正の整数NおよびM.であります Nは、町の住民(1 <= N <= 30000)の数を表し、Mは、これらの住民の数(0 <= M <= 30000)友人関係を表します。次のM行それぞれは、2つの整数A、B有する(1 <= A、B <= Nを、AはBと等しくない)、Aの代わりに、Bは、友人です。いくつかは、このM行を繰り返してもよいです。
出力フォーマット
出力ファイルのみ1行、友人として多くの人々このグループの最大の町。
サンプル入力
10 12
1 2
3 1
3 4
5 4
3 5
4 6
5 2
2 1
7 10
1 2
9 10
8 9
サンプル出力
6
制限事項と規則
制限時間:1秒
スペースの制約:128メガバイト
書式#include <iostreamの> 使用して 名前空間はstdを、 INT [F 50010 ]、N、M、P、サイズ[ 30010 ]、ANS [ 30010 ]。 INT(見つけるINT X) { 場合(X == [X] F)リターンX。 他の リターン [X] = F ([X] F)を見つけます } ボイドマージ(int型のx、int型のY) { int型 RX =(X)を求めるRY = (y)を見つけます。 もし(RX =!RY){ 場合(サイズ[RX]> =サイズ[RY]){F [RY] = RX;サイズ[RX] + = サイズ[RY];} そう{[RX] = RY F;サイズ[RY] + = サイズ[RX];} } } int型(メイン) { int型、B、DS = 0 。 CIN >> N >> M。 以下のために(int型 i = 1 ; iは= N <; iは++){[i]は= I F;サイズ[i]は= 1 ;} ため(int型 I = 1 ; I <= M; iは++ ) { CIN >> A> > B; (B)マージ。 } のために(int型 I = 1を iが++; iが<= N ) { ANS [(I)検索] ++ ; もし(ANS [見つける(I)]> DS)のDS =のANSは、[検索(I)]。 } COUT << DS。 リターン 0 ; }