WEEK6 周記 作業 並查集 戴好口罩

2021-10-23 02:32:54 字數 1618 閱讀 6019

新型冠狀病毒肺炎(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個整數代表這個小團體的學生。

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

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

output41

1由提議可以看出這是乙個典型的並查集題目。通過將有重合成員的群組合並來劃分集合。最後劃分完成之後找出與感染者同一集合的成員就是需要隔離的人員。

注意:可以在在find函式中進行巧妙的路徑壓縮

int

find

(int a)

int root =

find

(st[a]

.first)

; st[a]

.first = root;

//路徑壓縮

return root;

}

否則有可能會超時。

find這個識別符號最好不要用,可能會ce。max、min、y1(如果有標頭檔案cmath的話)也最好不要用。

#include

#include

#include

#include

using

namespace std;

int n,m;

pair<

int,

int> st[

30010];

intfind

(int a)

int root =

find

(st[a]

.first)

; st[a]

.first = root;

return root;

}int

unit

(int a,

int b)

intmain()

;for

(int i=

0;iint root =

find(0

);printf

("%d\n"

,st[root]

.second);}

return0;

}

week6 戴好口罩! 並查集的基本應用

分析總結 大家出門還是要戴好口罩噢?新型冠狀病毒肺炎 corona virus disease 2019,covid 19 簡稱 新冠肺炎 是指2019新型冠狀病毒感染導致的肺炎。如果乙個感染者走入乙個群體,那麼這個群體需要被隔離!小a同學被確診為新冠感染,並且沒有戴口罩!危!時間緊迫!需要盡快找到...

WEEK6 作業 B 戴好口罩!

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

Week6 作業B 戴好口罩!

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