並查集之The Suspects

2021-08-22 06:03:38 字數 1036 閱讀 5003

在不傳播疾病的大學(nssu)中,有很多學生群體。同一組的學生經常互相交流,學生可以加入幾個小組。為了防止sars可能傳播,nsusu收集所有學生組的成員名單,並在其標準操作程式(sop)中執行以下規則。

一旦乙個小組中的成員是嫌疑犯,該組中的所有成員都是嫌疑犯。

然而,他們發現,當乙個學生被認定為嫌疑犯時,不容易識別所有的嫌疑犯。你的工作是寫乙個程式,找出所有嫌疑犯。

input

輸入檔案包含幾種情況。每個測試用例從兩個整數n和m開始,其中n是學生的數目,m是組的數目。你可以假設0<n<=30000,0 <=m <=500。每個學生都有0到n到1之間的乙個唯一的整數,最初學生0被認定為所有案件中的嫌疑犯。這一行後面是m組成員列表,每組一行。每一行都以整數k開頭,表示該組中成員的數目。根據成員的數量,有k整數代表這個組的學生。一行中的所有整數由至少乙個空間分隔。

n=0,m=0的情況表示輸入結束,不需要處理。

output

對於每種情況,輸出一行中嫌疑犯的數量。

sample input

100 4

2 1 2

5 10 13 11 12 14

2 0 1

2 99 2

200 2

1 55 1 2 3 4 5

1 00 0

sample output

4

11

#include #include #include using namespace std;

int per[30100], num[30100],a[30100];

int find(int x)

void join(int x, int y)

}int main ()

while(m--)

for(i=0 ; ijoin(a[i], a[i + 1]);//把同一小組的歸類 使他有共同的祖先

}k=find(0);

printf("%d\n", num[k]);

}return 0;

}

The Suspects 並查集 超詳細題解

嚴重急性呼吸系統綜合症 sars 一種原因不明的非典型性肺炎,從2003年3月中旬開始被認為是全球威脅。為了減少傳播給別人的機會,最好的策略是隔離可能的患者。在not spreading your sickness大學 nsysu 有許多學生團體。同一組的學生經常彼此相通,乙個學生可以同時加入幾個小...

並查集 並查集

本文參考了 挑戰程式設計競賽 和jennica的github題解 陣列版 int parent max n int rank max n void init int n int find int x else void union int x,int y else 結構體版 struct node ...

並查集路徑壓縮 關係表示之並查集

在我們平常生活中,無論是人與人之間還是動物與動物之間,都有直接或間接的關係,比如親戚關係等,那麼如果我給你一堆人的親戚關係,並且問你這一堆人中的某兩個人是否是親戚關係,這個該如何實現呢?我們可以假設,沒有親戚關係的兩個人屬於不同的家族,而家族我們又可以假設為集合,即這兩個人屬於不同的集合。這顆樹表示...