7 1 參與者人數 (並查集問題)

2021-10-03 17:44:44 字數 960 閱讀 6874

臨沂大學有很多社團,乙個學生可能會加入多個社團。為了活躍大學生業餘生活,增強體育運動積極性,臨沂大學讀書社團決定舉行大學生跳繩比賽,要求該社團成員必須參加。為了擴大影響,要求只要其他社團有乙個人參加,那麼該社團中的每乙個人都必須參加。求參加比賽至少多少人?

輸入格式:

輸入第一行包含兩個整數n和m,n(0 < n <= 30000)表示學生的數目,m(0 <= m <= 500)表示社團的數目。每個學生都有乙個唯一的編號,編號取值為0到n-1,編號為0的社團是讀書社團。 接下來有m個社團的名單,每個社團的名單在輸入中為一行。每一行先輸入乙個數k表示社團總人數。接著是社團中k個成員的編號。

輸出格式:

輸出乙個數占一行,表示參加比賽的總人數。

並查集

適用於:團夥的團夥都是團夥,所有有關係的人連線成乙個集合

演算法:用乙個陣列存每個的老大,但是需要呼叫找老大函式才能更新

乙個主要函式(找老大函式):

用來給每乙個更新老大,做法是遞迴找出他的上級的上級,遞迴條件是老大的上級是他自己

首先把每個的老大設定為他自己

然後把每個人和他的團夥的老大對比,要是他倆不是乙個老大,那就把其中乙個的老大設定為另乙個的上級

**:

#include #include using namespace std;

int h[505];

int find(int x)//找老大(每個集合的標誌元素)函式

h[x]=find(h[x]);

return h[x];

}int main()

for(int j=1;j> temp;

if(find(t)!=find(temp))}}

int min=0;

for(int j=0;j哎,這可真的太難了!

太難了

參與者人數 20分 並查集

臨沂大學有很多社團,乙個學生可能會加入多個社團。為了活躍大學生業餘生活,增強體育運動積極性,臨沂大學讀書社團決定舉行大學生跳繩比賽,要求該社團成員必須參加。為了擴大影響,要求只要其他社團有乙個人參加,那麼該社團中的每乙個人都必須參加。求參加比賽至少多少人?輸入格式 輸入第一行包含兩個整數n和m,n ...

並查集問題

輸入 第一行 城鎮數目n,道路數目m 接下的每一行表示 某條道路連線的城鎮號 輸出 至少還需要建設的道路數目,才能將所有的城鎮連線起來 例子 輸入 3 31 2 1 22 1 輸出 1解釋 要使城鎮123連通,還需要修建23之間的連通路 即還需要修建一條路 cpp實現問題求解 include usi...

佈線問題 並查集

描述 南陽理工學院要進行用電線路改造,現在校長要求設計師設計出一種佈線方式,該佈線方式需要滿足以下條件 1 把所有的樓都供上電。2 所用電線花費最少 輸入 第一行是乙個整數n表示有n組測試資料。n 5 每組測試資料的第一行是兩個整數v,e.v表示學校裡樓的總個數 v 500 隨後的e行裡,每行有三個...