WEEK6 作業 B 戴好口罩!

2021-10-04 11:01:08 字數 1306 閱讀 7367

新型冠狀病毒肺炎(corona virus disease 2019,covid-19),簡稱「新冠肺炎」,是指2019新型冠狀病毒感染導致的肺炎。

如果乙個感染者走入乙個群體,那麼這個群體需要被隔離!

小a同學被確診為新冠感染,並且沒有戴口罩!!!!!!

危!!!

時間緊迫!!!!

需要盡快找到所有和小a同學直接或者間接接觸過的同學,將他們隔離,防止更大範圍的擴散。

眾所周知,學生的交際可能是分小團體的,一位學生可能同時參與多個小團體內。

請你編寫程式解決!戴口罩!!

多組資料,對於每組測試資料:

第一行為兩個整數n和m(n = m = 0表示輸入結束,不需要處理),n是學生的數量,m是學生群體的數量。0 < n <= 3e4 , 0 <= m <= 5e2

學生編號為0~n-1

小a編號為0

隨後,m行,每行有乙個整數num即小團體人員數量。隨後有num個整數代表這個小團體的學生。

輸出要隔離的人數,每組資料的答案輸出佔一行

10042

12510

1311

121420

12992

200215

5123

4510

00

4

11

一道並查集的題目,只用了並查集的知識點。

要找需要帶口罩的人,就是找0號同學的朋友或朋友的朋友。

對所有人進行分組,首先,每個人是獨自的乙個小組,若兩個人都在乙個小圈子裡,則將這兩個人所在的組合並。當我們將所有的小圈子裡的人都進行過合併後,與0號同學所在組相同的人需要帶口罩。

合併小組的過程就是並查集的過程,我們採用的是樹形的並查集小組,每個點所在的樹的根就是這個組的代表元。

par陣列儲存的是父節點的編號(順著父節點往上找就能找到該組的代表元),total陣列儲存的是以i為代表元的小組中的人數(所以每個人所在的小組人數應該找這個小組的代表元在total陣列中的對應值)。

除錯過程中犯過的錯:①一開始沒有初始化 ②在合併小組的時候若這兩個點的代表元相同應立刻返回(繼續執行程式的話雖然他們還是乙個組,但是對應的total值會出錯) ③找0號同學所在小組人數的時候total[o]->total[par[0]]->total[find(0)]。

#include #include int par[30010],total[30010];

using namespace std;

void init(int n)

return 0;

}

Week6 作業B 戴好口罩!

新型冠狀病毒肺炎 corona virus disease 2019,covid 19 簡稱 新冠肺炎 是指2019新型冠狀病毒感染導致的肺炎。如果乙個感染者走入乙個群體,那麼這個群體需要被隔離!小a同學被確診為新冠感染,並且沒有戴口罩!危!時間緊迫!需要盡快找到所有和小a同學直接或者間接接觸過的同...

戴好口罩! Week6作業B題

新型冠狀病毒肺炎 corona virus disease 2019,covid 19 簡稱 新冠肺炎 是指2019新型冠狀病毒感染導致的肺炎。如果乙個感染者走入乙個群體,那麼這個群體需要被隔離!小a同學被確診為新冠感染,並且沒有戴口罩!危!時間緊迫!需要盡快找到所有和小a同學直接或者間接接觸過的同...

week6作業題 B 戴好口罩!

新型冠狀病毒肺炎 corona virus disease 2019,covid 19 簡稱 新冠肺炎 是指2019新型冠狀病毒感染導致的肺炎。如果乙個感染者走入乙個群體,那麼這個群體需要被隔離!小a同學被確診為新冠感染,並且沒有戴口罩!危!時間緊迫!需要盡快找到所有和小a同學直接或者間接接觸過的同...