新型冠狀病毒肺炎(corona virus disease 2019,covid-19),簡稱「新冠肺炎」,是指2019新型冠狀病毒感染導致的肺炎。如果乙個感染者走入乙個群體,那麼這個群體需要被隔離!
小a同學被確診為新冠感染,並且沒有戴口罩!!!!!!
危!!!
時間緊迫!!!!
需要盡快找到所有和小a同學直接或者間接接觸過的同學,將他們隔離,防止更大範圍的擴散。
眾所周知,學生的交際可能是分小團體的,一位學生可能同時參與多個小團體內。
請你編寫程式解決!戴口罩!!
input根據題意可知,這是乙個簡單的並查集的問題。其中並查集集合為par,初始化的時候令par[i] = i即n個孤立元素,獨自一組。在這裡面並查集的實現時,我使用了路徑壓縮的方法,即將每個一組中的節點都與它的代表元素直接相連。在相連的時候如果兩個元素不是屬於同一組的話,就將兩個集合連線,這裡我們為了避免變成"高樹",我們使用乙個rnk陣列來維護集合的大小。多組資料,對於每組測試資料:
第一行為兩個整數n和m(n = m = 0表示輸入結束,不需要處理),n是學生的數量,m是學生群體的數量。0 < n <= 3e4 , 0 <= m <= 5e2
學生編號為0~n-1
小a編號為0
隨後,m行,每行有乙個整數num即小團體人員數量。隨後有num個整數代表這個小團體的學生。
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 output41
1
//#include
#include
#include
#define _for(i,a,b) for(int i = (a); i < (b); i++)
#define _rep(i,a,b) for(int i = (a); i <= (b); i++)
using
namespace std;
const
int maxn =
3e4+10;
int n,m,a,b,num;
int par[maxn]
,rnk[maxn]
;//並查集集合,記錄集合的大小
intfind
(int x)
bool
unite
(int x,
int y)
intmain()
_for
(i,0
,m)}
cout << rnk[
find(0
)]<< endl;
}}
戴好口罩! 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同學直接或者間接接觸過的同...