暢通工程 並查集入門裸題

2022-09-10 16:09:22 字數 1620 閱讀 3879

某省調查城鎮交通狀況,得到現有城鎮道路統計表,表中列出了每條道路直接連通的城鎮。省**「暢通工程」的目標是使全省任何兩個城鎮間都可以實現交通

(但不一定有直接的道路相連,只要互相間接通過道路可達即可)。問最少還需要建設多少條道路?

測試輸入包含若干測試用例。每個測試用例的第1行給出兩個正整數,分別是城鎮數目n ( < 1000 )和道路數目m;

隨後的m行對應m條道路,每行給出一對正整數,分別是該條道路直接連通的兩個城鎮的編號。為簡單起見,城鎮從1到n編號。

注意:兩個城市之間可以有多條道路相通,也就是說

3 31 2

1 22 1

這種輸入也是合法的

當n為0時,輸入結束,該用例不被處理。

對每個測試用例,在1行裡輸出最少還需要建設的道路數目。

4 21 3

4 33 3

1 21 3

2 35 2

1 23 5

999 001

02998

#include#includeusing namespace std;

int fa[10010];

void start(int x)

int cha(int x)

void bing(int a, int b)

int main()

for (int i = 1; i <= n; i++)

if (fa[i]==i)ans++; //師傅是自己的,說明是乙個門派

cout << ans-1 << "\n";

} }return 0;

}

若某個家族人員過於龐大,要判斷兩個是否是親戚,確實還很不容易,現在給出某個親戚關係圖,求任意給出的兩個人是否具有親戚關係。

規定:x和y是親戚,y和z是親戚,那麼x和z也是親戚。如果x,y是親戚,那麼x的親戚都是y的親戚,y的親戚也都是x的親戚。

輸入格式:

第一行:三個整數n,m,p,(n<=5000,m<=5000,p<=5000),分別表示有n個人,m個親戚關係,詢問p對親戚關係。

以下m行:每行兩個數mi,mj,1<=mi,mj<=n,表示mi和mj具有親戚關係。

接下來p行:每行兩個數pi,pj,詢問pi和pj是否具有親戚關係。

輸出格式:

p行,每行乙個』yes』或』no』。表示第i個詢問的答案為「具有」或「不具有」親戚關係。

輸入樣例#1:

6 5 3

1 21 5

3 45 2

1 31 4

2 35 6

輸出樣例#1:

yes

yesno

#includeusing namespace std;

const int maxn = 5010;

int f[maxn];

int cha(int a)

void bing(int x, int y)

int main()

for (int i = 0; i < p; i++)

return 0;

}

並查集入門題(暢通工程)

某省調查城鎮交通狀況,得到現有城鎮道路統計表,表中列出了每條道路直接連通的城鎮。省 暢通工程 的目標是使全省任何兩個城鎮間都可以實現交通 但不一定有直接的道路相連,只要互相間接通過道路可達即可 問最少還需要建設多少條道路?input測試輸入包含若干測試用例。每個測試用例的第1行給出兩個正整數,分別是...

暢通工程 並查集模版題

題意 多組輸入n,m,當n為0退出人輸入,n是道路數目,m是村莊總數,隨後n行,每行輸入三個數兩個村莊的編號,以及連線這兩個村莊的費用。對每一組資料輸出暢通工程的最低費用,如果不能暢通就輸出 不包括雙引號 一道是fjut的鏈結,另外一道是hdu的 思路 其實這道題就是一道排序 並查集題,將每條路的費...

並查集 暢通工程

problem description 某省調查城鎮交通狀況,得到現有城鎮道路統計表,表中列出了每條道路直接連通的城鎮。省 暢通工程 的目標是使全省任何兩個城鎮間都可以實現交通 但不一定有直接的道路相連,只要互相間接通過道路可達即可 問最少還需要建設多少條道路?input 測試輸入包含若干測試用例。...