码迷,mamicode.com
首页 > 其他好文 > 详细

hdu 1879 继续畅通工程

时间:2015-04-04 21:12:07      阅读:163      评论:0      收藏:0      [点我收藏+]

标签:

感觉自己对kruscal的算法掌握的比较熟了,这题就没有用2种解法解答了.

因为两种解法都是用自己写的模板来的,复制也没啥意思.

这题就是根据读入的数据,如果是修建状态是1的话,说明不用修建了,就将权重置为1,其他套模板;

技术分享
 1 #include <iostream>
 2 #include <stdio.h>
 3 #include <string.h>
 4 using namespace std;
 5 #define maxn 105
 6 #define INF 0x3f3f3f3f
 7 int mincost[maxn];
 8 int cost[maxn][maxn];
 9 bool visit[maxn];
10 int n;
11 int prim()
12 {
13     int res = 0, index = 1,min_cost;
14     for(int i = 1;i <= n;i++)
15         mincost[i] = cost[i][1];
16     mincost[1] = 0;
17     memset(visit,false,sizeof(visit));
18     visit[1] = true;
19     for(int i = 1 ; i <= n; i++)
20     {
21         min_cost = INF;
22         for(int j = 1; j <= n; j++)
23         {
24             if(mincost[j]<min_cost && !visit[j])
25             {
26                 min_cost = mincost[j];
27                 index = j;
28             }
29         }
30         visit[index] = true;
31         for(int k = 1; k <= n; k++)
32         {
33             if(!visit[k] && cost[k][index] < mincost[k])
34                 mincost[k] = cost[k][index] ;
35 
36         }
37 
38     }
39     for(int i = 1 ;i <=n;i++)
40         res += mincost[i];
41     return res;
42 }
43 int main()
44 {
45     //freopen("1879.txt","r",stdin);
46     int a,b,c,d;
47     while(~scanf("%d",&n),n)
48     {
49         memset(visit,false,sizeof(visit));
50         memset(cost,INF,sizeof(visit));
51         for(int i = 0 ;i< n*(n-1)/2 ; i++)
52         {
53          scanf("%d %d %d %d",&a,&b,&c,&d);
54          if(d == 0)
55             cost[a][b]=cost[b][a] = c;
56          else
57             cost[a][b]=cost[b][a] = 0;
58         }
59         printf("%d\n",prim());
60     }
61     return 0;
62 }
View Code

 

hdu 1879 继续畅通工程

标签:

原文地址:http://www.cnblogs.com/xiaoniuniu/p/4392784.html

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