九度 題目1012 暢通工程

2021-06-26 18:06:16 字數 1081 閱讀 3398

這題我是以連通域來做的,n個點至少需要n-1個邊才能連通。如果形成迴路,則相當於有這條邊浪費了,沒有任何價值。

最終至少還需要多少邊才能把所有的城鎮聯通,也就是求剩下的孤立的點和連通域之間還需要幾條邊才能連通!比如:最後利用程式求得3個連通域和2個孤立的點,那麼至少需要3+2-1=5條邊才能全部連通;如果是兩個連通域和1個孤立的點,則還至少需要2+1-1=2條邊才能全部連通。

**如下:

#include

int main()

scanf("%d",&m);

count1 = 0;

count2 = 0;

count3 = n;

for(int i = 0; i < m; i++)else if(town[start] && !town[end])else if(!town[start] && town[end])else if(town[start] != town[end])

}count2--;

*/

temp=town[end];//必須用乙個temp來儲存比較基準,因為temp不會因比較而發生改變

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

}count2--;}}

printf("%d\n",count2 + count3 - 1);

}return 0;

}

使用並查集,**更簡單易懂,如下:

#include

int fin[1000];

int visit[1000];

int find(int a)

return find(fin[a]);

}void merge(int a, int b)

int main()

while(m--)

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

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

printf("%d\n",j - 1);}}

九度 1012 暢通工程

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

題目1012 暢通工程

這道題如果不用並查集感覺根本無從下手,可以將題目理解為 如果兩點之間有路徑,那麼與他們連線的其他結點也就貫通了,即可以歸屬於同乙個集合,關於並查集方法的敘述,有一篇部落格講的很好 include using namespace std int tree 1000 int findroot int x...

題目1012 暢通工程

題目描述 某省調查城鎮交通狀況,得到現有城鎮道路統計表,表中列出了每條道路直接連通的城鎮。省 暢通工程 的目標是使全省任何兩個城鎮間都可以實現交通 但不一定有直接的道路相連,只要互相間接通過道路可達即可 問最少還需要建設多少條道路?輸入 注意 兩個城市之間可以有多條道路相通,也就是說 3 31 2 ...