首页 > 代码库 > poj 1258 Agri-Net
poj 1258 Agri-Net
kruskal
1 #include<iostream> 2 #include<algorithm> 3 #include<cstdio> 4 using namespace std; 5 #define maxn 200 6 int a[maxn][maxn]; 7 int par[maxn]; 8 int n,len; 9 int num;10 struct node11 {12 int x;13 int y;14 int w;15 };16 node e[maxn * maxn / 2];17 int cmp(const node& a,const node &b)18 {19 return a.w < b.w;20 }21 int Find(int k)22 {23 if(par[k] == k) return k;24 par[k] = Find(par[k]);25 return par[k];26 }27 void Merge(int x,int y)28 {29 int a = Find(x);30 int b = Find(y);31 if(a != b)32 {33 par[a] = b;34 }35 }36 37 void kruskal()38 {39 40 while(cin>>n)41 {42 for(int i = 0; i <= n+5; i++)43 par[i] = i;44 num = 0;45 len = 0;46 for(int i = 1; i <= n; i++)47 for(int j = 1; j <= n; j++)48 cin>>a[i][j];49 50 for(int i = 1; i <= n; i++)51 for(int j = i + 1; j <= n; j++)52 {53 e[num].x = i;54 e[num].y = j;55 e[num++].w = a[i][j];56 }57 sort(e,e+num,cmp);58 for(int i = 0; i < num; i++)59 {60 if(Find(e[i].x) != Find(e[i].y))61 {62 Merge(e[i].x,e[i].y);63 len += e[i].w;64 }65 }66 cout<<len<<endl;67 }68 69 }70 int main()71 {72 freopen("input.txt","r",stdin);73 kruskal();74 75 return 0;76 }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。