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