どのように多くのTables--互いに素設定テンプレートのタイトル

トピックリンク

質問の意味:

N人は夕食に出席し、二人は知りませんでした同じテーブルを割り当てることができない。推移を理解する:BBはCを知っている知ってその後、AとCも認識されています。

ソリューション:

私たちは、二人が同じコレクションにマージ認識します統計の異なるセットが最終的に持つことができますどのように多くの。

 

コード:

書式#include <iostreamの> 
書式#include <stdio.hに> 
する#include <math.h>の
 使用して 名前空間はstd; 
typedefの長い 長いLL。
const  int型 MAXN = 5E5 + 5 INT [MAXN] F。
INTのN、M。
int型NUM [MAXN]。
INT [MAXN]。
INT検索(int型X)
{ 
    戻り X == F [x]はx:F [X] = 検索(F [X])。
} 
ボイドは、(参加int型のx、int型のY)
{ 
    int型 FXを= 探す(X)。
    int型FY = 検索(Y)。
    もし(!FX = FY)
    { 
        F [FX] = FY。
    } 
} 
int型のmain()
{ 
    int型のT。
    scanf関数(" %のD "、&T)。
    一方、(t-- 
    { 
        scanf関数(" %D%dの"、&​​N、&M)。
        以下のためにint型 I = 1 F [I] = iは++; iが<= N)I。
        一方、(M-- 
        { 
            int型X、Y。
            scanf関数("%D%D 、およびX&Y)、
            (X、Y)に参加; 
        } 
        int型 ANS = 0 ;
         のためint型 i = 1 ; iが<= N; iが++)場合()[I] == I F ANS ++ ; 
        のprintf(" %d個の\ n " 、ANS); 
    } 
    戻り 0 ; 
}
コードの表示

 

おすすめ

転載: www.cnblogs.com/j666/p/11610018.html