HDU暢通公路 1863

2021-10-08 19:37:22 字數 611 閱讀 6433

題意提煉:將所有村莊連在一起,使所修道路最短, 最小生成樹。

1.並查集:並查集不會成環;也能通過計數fa[i]==i 來判斷是否連通

2.kruskal演算法:無環   連線所有點(並查集和它很搭)

/*並查整合樹形,不會成環->克魯斯卡爾演算法*/ 

#include#include#includeusing namespace std;

int pre[105];

struct nodeedge[999];

void init()

}int find(int n)

int merge(int a,int b)

else return 0;

}bool cmp(node a, node b)

sort(edge,edge+n,cmp);

int sum=0;

int count =0;

int ans=1;

for(int i=0;i1)

} if(ans) cout

}

HDU 1863 暢通工程

include include include using namespace std const int maxn 5000 5 int n,m,ans,cnt bool flag struct streat edge maxn int root 105 int find int x void k...

hdu 1863 暢通工程

傳送門給定n個村子,和m個可能要修的道路,現在要求連線這n個村子的最小成本,如果 無法構成一顆最小生成樹,則輸出?這題典型的最小生成樹模板題,krusal演算法和prim演算法都可以達到要求 並且這題的資料量不大,並且是完全圖,利用鄰接矩陣做就好 include const int maxn 1e2...

hdu1863 暢通工程

題目鏈結 本題和還是暢通工程思路非常類似。區別在於後者給的圖的邊數為n n 1 2,是乙個無向完全圖,一定能找到乙個最小生成樹。而前者給的邊數不定,所以不一定能生成乙個最小生成樹,需要判斷。所用知識點 kruskal演算法 最小生成樹 並查集 如下 include include includeus...