首页 > 其他 > 详细

HDU 1102 Constructing Roads

时间:2014-03-01 11:06:23      阅读:449      评论:0      收藏:0      [点我收藏+]

提议很简单,就是N个村庄,每个村庄连起来需要一定的费用(以两个村庄的距离作为费用)。有M条路已经是相连的(不需要建路连接),问最少的费用,使它们都相连。

最小生成树,prim解决,附上代码:

bubuko.com,布布扣
 1 #include<iostream>
 2 #include<cstring>
 3 #include<stdio.h>
 4 #define MAX 101
 5 #define MAXINT 1000001
 6 using namespace std;
 7 int map[MAX][MAX],dis[MAX],m,n,luxian;
 8 bool visit[MAX];
 9 void prim()
10 {
11     memset(visit,false,sizeof(visit));
12     int i,j,MIN,k;luxian=0;
13     for(i=1;i<=n;i++) dis[i]=map[1][i];
14     visit[1]=true;
15     for(i=1;i<n;i++){
16         MIN=MAXINT;
17         for(j=2;j<=n;j++)
18             if(!visit[j] && dis[j]<MIN){
19                 MIN=dis[j];
20                 k=j;
21             }
22         visit[k]=true;
23         luxian+=MIN;
24         for(j=2;j<=n;j++)
25             if(!visit[j] && map[k][j]<dis[j]){
26                 dis[j]=map[k][j];
27             }
28     }
29 }
30 int main()
31 {
32     int i,j,x,y;
33     while(scanf("%d",&n)!=EOF){
34         for(i=1;i<=n;i++)
35             for(j=1;j<=n;j++)
36                 scanf("%d",&map[i][j]);
37         scanf("%d",&m);
38         for(i=1;i<=m;i++){
39             scanf("%d%d",&x,&y);
40             map[x][y]=map[y][x]=0;
41         }
42         prim();
43         printf("%d\n",luxian);
44     }
45 }
View Code

HDU 1102 Constructing Roads,布布扣,bubuko.com

HDU 1102 Constructing Roads

原文:http://www.cnblogs.com/bokezhilu/p/3574286.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!