洛谷P1536 村村通

2022-05-01 10:39:07 字數 1236 閱讀 5176

題目提供者johnkram

標籤雲端↑

難度普及/提高-

時空限制1s / 128mb

提交  討論  題解  

某市調查城鎮交通狀況,得到現有城鎮道路統計表。表中列出了每條道路直接連通的城鎮。市**「村村通工程」的目標是使全市任何兩個城鎮間都可以實現交通(但不一定有直接的道路相連,只要相互之間可達即可)。請你計算出最少還需要建設多少條道路?

輸入格式:

每個輸入檔案包含若干組測試測試資料,每組測試資料的第一行給出兩個用空格隔開的正整數,分別是城鎮數目n(n<1000)和道路數目m;隨後的m行對應m條道路,每行給出一對用空格隔開的正整數,分別是該條道路直接相連的兩個城鎮的編號。簡單起見,城鎮從1到n編號。

注意:兩個城市間可以有多條道路相通。例如:

3 3 1 2 1 2 2 1 這組資料也是合法的。當n為0時,輸入結束。

輸出格式:

對於每組資料,對應一行乙個整數。表示最少還需要建設的道路數目。

輸入樣例#1:

4 2

1 34 3

3 31 2

1 32 3

5 21 2

3 5999 0

0

輸出樣例#1:

102

998分析:判連通我們一般用並查集,如果這道題是有向圖,那麼可以先縮點,然後看有幾個強連通分量,但是對於無向圖而言要怎麼操作呢?這個時候我們可以只需要找出每個點的祖先即可,有多少個不同的祖先,即有多少個不同的強連通分量,答案的個數為強連通分量的個數-1(連通n個點最少需要n-1條邊)

#include #include 

#include

#include

#include

#include

#include

#include

using

namespace

std;

int n, m,fa[1010

],ans;

int find(int

x)int

main()

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

if (fa[i] ==i)

ans++;

printf(

"%d\n

", ans - 1

); }

return0;

}

洛谷P1536 村村通

有t組測試資料 t 是的你沒有看錯,就是無窮大!其實是因為我不知道有多少 每組測試資料給出n個村莊,m條道路,問還需幾條道路,使這張圖聯通。用並查集連線,再統計這張圖還需幾條路聯通。include define r i,a,b for int i a i b i using namespace st...

P1536 村村通(洛谷)並查集

隔壁的dgdger帶我看了看老師的lca教程,我因為學習數學太累了 就是懶 去水了一下,感覺很簡單的樣子,於是我也來寫 水 個部落格吧。題目描述 某市調查城鎮交通狀況,得到現有城鎮道路統計表。表中列出了每條道路直接連通的城鎮。市 村村通工程 的目標是使全市任何兩個城鎮間都可以實現交通 但不一定有直接...

洛谷 最小生成樹 P1536 村村通

題目描述 某市調查城鎮交通狀況,得到現有城鎮道路統計表。表中列出了每條道路直接連通的城鎮。市 村村通工程 的目標是使全市任何兩個城鎮間都可以實現交通 但不一定有直接的道路相連,只要相互之間可達即可 請你計算出最少還需要建設多少條道路?輸入格式 每個輸入檔案包含若干組測試測試資料,每組測試資料的第一行...