友達互いに素セット

問題の説明

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 ; 
}

 

おすすめ

転載: www.cnblogs.com/hfang/p/11239992.html
おすすめ