杭電 1233 還是暢通工程

2021-07-10 01:49:01 字數 1172 閱讀 9237

基礎的最小生成樹題目

可以拿來練習一下prim演算法和kruskal演算法的運用

prim:

#include

#include

using

namespace

std;

int main()

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

}int t=n*(n-1)/2;

while(t--)

int sum=0;

dis[1]=0;

while(true)

}printf("%d\n",sum);

}return

0;}

kruskal:

有個小插曲就是這次用了這一句

using namespace std;

導致了 rank 這個陣列出錯了

應該是命名重名那方面的原因……

雖然本地除錯並沒問題

然後改了個名字 也是ac了

#include

#include

using

namespace

std;

struct edge e[14400];

int par[120];

int ran[120];

int find(int m)

void unite(int x,int y)

}bool cmp(edge a,edge b)

int t=n*(n-1)/2;

for(int i=0; iscanf("%d %d %d",&e[i].u,&e[i].v,&e[i].dis);

}sort(e,e+t,cmp);

int sum=0;

for(int i=0; iif(find(e[i].u)!=find(e[i].v))

}printf("%d\n",sum);

}return

0;}

杭電 1233 還是暢通工程 (最小生成樹)

某省調查鄉村交通狀況,得到的統計表中列出了任意兩村莊間的距離。省 暢通工程 的目標是使全省任何兩個村莊間都可以實現公路交通 但不一定有直接的公路相連,只要能間接通過公路可達即可 並要求鋪設的公路總長度為最小。請計算最小的公路總長度。測試輸入包含若干測試用例。每個測試用例的第1行給出村莊數目n 100...

HDU 1233 還是暢通工程

題意 有1 n個村莊,村莊與村莊之間要鋪設公路,在使任意兩個村莊都能相互到達的前提下使修路的花費最少 解題思路 這題是典型的最小生成樹的題,可以選擇prim演算法或者kruskal演算法。prim使用與稀疏圖,二此題中的邊有n n 1 2條,因此最好是用kruskal演算法。kruskal演算法的思...

hdu 1233 還是暢通工程

這個題我用的貪心和並查集來解決的。kruskal演算法 首先用貪心對長度排序,然後按照長度從小到 擇連線,沒有被聯通的則直接連,要注意乙個問題就是如果4個村莊是1 4聯通了,2 3聯通了,那麼肯定還要讓這兩個集合聯通 用並查集 因此我用了乙個p來表示不同的集合。ac include include ...