中国聯通のテンプレートタイトルの作品のためのSuspects--互いに素、設定された量

トピックリンク

質問の意味:

nはm番目の学生のグループに属する、学生は複数のグループに属することができます。学生疑われる病気は、彼が属するグループ全体が病気を疑われています。0知られている疑いがある病気は、各グループは、学生憲法、疑われる病気を求めている学生の総数を持っています

ソリューション:

古典的なトピックと検索セット、個人のコレクションのルートとして各インデックスの現在のレコードの[]配列NUM番号NUM番号0に対応するルートノードの最終的な出力値を見つけ、0番は、学生のグループであります番号。

 

コード:

書式#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。
        NUM [FY] + = NUM [FX]。
    } 
} 
int型のmain()
{ 
    ながら(scanf関数(" %d個の%のD "、&​​N、&M)&&(N || M))は
    { 
        ためint型 i = 0 ; iがn <; iは++)= [I] F I 、NUM [I] = 1 

        一方、(M-- 
        { 
            int型K。
            scanf関数(" %のD "、&K)。
            以下のためのINT I = 1 ;()は、i ++はscanf関数を、私は= Kを< " %のD "、および[I])。
            以下のためにint型 i = 1 ; iはkは<; I ++の)参加([I]、[I + 1 ])。
        } 
        int型 K =探す(0 )。
        printf(" %d個の\ n " 、NUM [K])。
    } 
    戻り 0 
}
コードの表示

 

おすすめ

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