某省調查城鎮交通狀況,得到現有城鎮道路統計表,表中列出了每條道路直接連通的城鎮。省**「暢通工程」的目標是使全省任何兩個城鎮間都可以實現交通
(但不一定有直接的道路相連,只要互相間接通過道路可達即可)。問最少還需要建設多少條道路?
測試輸入包含若干測試用例。每個測試用例的第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 31 21 5
3 45 2
1 31 4
2 35 6
輸出樣例#1:
yesyesno
#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 測試輸入包含若干測試用例。...