码迷,mamicode.com
首页 > Web开发 > 详细

[usaco3.1.1]agrinet

时间:2015-11-30 00:49:30      阅读:270      评论:0      收藏:0      [点我收藏+]

标签:

   是一道最小生成树的模板题,顺便学习了一下刘汝佳大大的间接排序和Kruskal算法。

 1 /*
 2 ID:abc31261
 3 LANG:C++
 4 TASK:agrinet 
 5 */
 6 #include<cstdio>
 7 #include<cstring>
 8 #include<algorithm>
 9 #include<iostream>
10 using namespace std;
11 const int maxn=11111;
12 int r[maxn],f[maxn],w[maxn],u[maxn],v[maxn];
13 
14 int cmp(const int i,const int j){ return w[i]<w[j]; }{间接排序}
15 
16 int find(int x)
17 {
18     if (f[x]!=x)f[x]=find(f[x]);
19     return f[x];
20 }
21 int main()
22 {
23     int i,j,l,x,y,n,m=0,ans=0;
24     freopen("agrinet.in","r",stdin);
25     freopen("agrinet.out","w",stdout);
26     scanf("%d",&n);
27     for (i=1;i<=n;i++)
28         for (j=1;j<=n;j++)
29         {
30             scanf("%d",&l);
31             w[++m]=l;
32             u[m]=i;
33             v[m]=j;
34         }
35     for (i=1;i<=m;i++)r[i]=f[i]=i;
36     sort(r+1,r+m+1,cmp);
37     for (i=1;i<=m;i++)
38     {
39         j=r[i]; x=find(u[j]); y=find(v[j]);
40         if (x!=y) 
41         {
42            ans+=w[j];
43            f[y]=x;
44         }
45     }
46     printf("%d\n",ans);
47     return 0;
48 }

 

[usaco3.1.1]agrinet

标签:

原文地址:http://www.cnblogs.com/Sun-Sea/p/5005889.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!