在不傳播疾病的大學(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 4sample output2 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
411
#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 ...
並查集路徑壓縮 關係表示之並查集
在我們平常生活中,無論是人與人之間還是動物與動物之間,都有直接或間接的關係,比如親戚關係等,那麼如果我給你一堆人的親戚關係,並且問你這一堆人中的某兩個人是否是親戚關係,這個該如何實現呢?我們可以假設,沒有親戚關係的兩個人屬於不同的家族,而家族我們又可以假設為集合,即這兩個人屬於不同的集合。這顆樹表示...