標籤:style class blog code http tar
題目連結:Agri-Net
最小產生樹水題,數組開的和題目描述一樣,但是就是RE,有填了個0,還好這個題用 庫魯斯卡爾 敲了一遍,發現了點問題,以前寫的庫魯卡爾模板有點問題,多寫了步無用的操作,已修正。
題意:就是一個農夫想選鎮長。。。。建一條路,使之能到達所有點,距離最短。
scanf輸入
cin輸入
#include <iostream>#include <cstdio>#include <cstring>#include <cstdlib>#include <algorithm>const int N = 11000;using namespace std;int n,ans,l;struct node{ int u,v,w;}edge[10000];int father[N];int cmp(const void *a,const void *b){ node *X = (struct node *)a; node *Y = (struct node *)b; return X->w - Y->w;}int find(int x){ return (father[x]==x)?(x):find(father[x]);}void Kruskal(){ ans = 0; int uu,vv; for(int i = 0;i<n;i++) father[i] = i; for(int i = 0;i<l;i++) { uu = find(edge[i].u); vv = find(edge[i].v); if(uu!=vv) { father[uu] = vv; ans += edge[i].w; } } cout<<ans<<endl;}int main(){ int a; while(cin>>n) { l = 0; for(int i = 0;i<n;i++) { for(int j = 0;j<n;j++) { cin>>a; edge[l].u = i; edge[l].v = j; edge[l].w = a; l++; } } qsort(edge,l,sizeof(edge[0]),cmp); Kruskal(); } return 0;}