搜索 继续畅通工程 problem e
来源:互联网 发布:淘宝店铺消失了 编辑:程序博客网 时间:2024/05/22 17:12
Problem Description
省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可)。现得到城镇道路统计表,表中列出了任意两城镇间修建道路的费用,以及该道路是否已经修通的状态。现请你编写程序,计算出全省畅通需要的最低成本。
Input
测试输入包含若干测试用例。每个测试用例的第1行给出村庄数目N ( 1< N < 100 );随后的 N(N-1)/2 行对应村庄间道路的成本及修建状态,每行给4个正整数,分别是两个村庄的编号(从1编号到N),此两村庄间道路的成本,以及修建状态:1表示已建,0表示未建。
当N为0时输入结束。
当N为0时输入结束。
Output
每个测试用例的输出占一行,输出全省畅通需要的最低成本。
Sample Input
31 2 1 01 3 2 02 3 4 031 2 1 01 3 2 02 3 4 131 2 1 01 3 2 12 3 4 10
Sample Output
310
题目分析:先判断每条路的状态,如果是修好的,就让它们的成本是0;如果没修,就让成本给出的成本。这样问题的处理就和1233一样了。
- #include<stdio.h>
- #include<string.h>
- #include<algorithm>
- using namespace std;
- #define inf 0x3f3f3f3f
- int map[100][100];
- int s[100],vis[100];
- int n,m;
- int prim()
- {
- int i,j,t,p,min,cnt,minpos;
- int ans=0;
- cnt=0;
- vis[1]=1;
- s[cnt++]=1;
- while(cnt<n)
- {
- t=cnt;
- min=inf;
- for(i=0;i<t;i++)
- {
- p=s[i];
- for(j=1;j<=n;j++)
- {
- if(!vis[j]&&map[p][j]<min)
- {
- min=map[p][j];
- minpos=j;
- }
- }
- }
- ans+=min;
- s[cnt++]=minpos;
- vis[minpos]=1;
- }
- return ans;
- }
- int main()
- {
- int i,sum;
- while(~scanf("%d",&n)&&n)
- {
- memset(vis,0,sizeof(vis));
- memset(map,inf,sizeof(map));
- int b,c,d,sta;
- m=n*(n-1)/2;
- for(i=0;i<m;i++)
- {
- scanf("%d%d%d%d",&b,&c,&d,&sta);
- if(sta==0)
- map[b][c]=map[c][b]=d;
- else
- map[b][c]=map[c][b]=0;
- }
- sum=prim();
- printf("%d\n",sum);
- }
- return 0;
- }
0 0
- 搜索 继续畅通工程 problem e
- E - 继续畅通工程
- H电-Problem Archive-1879-继续畅通工程
- 继续畅通工程
- hdu1879继续畅通工程
- HDU1879继续畅通工程
- HDOJ 继续畅通工程
- 继续畅通工程
- hdoj1879 继续畅通工程
- HDU1879--继续畅通工程
- 继续畅通工程
- Hdoj1879继续畅通工程
- 继续畅通工程
- 继续畅通工程
- 继续畅通工程
- 继续畅通工程
- OJ_1028 继续畅通工程
- hdu1879 继续畅通工程
- Udig开发环境搭建/入门教程
- HDU 2614 Beat (DFS)
- json往前台送数据中文乱码
- (OK) android update sdk - virtualbox nat port forwarding adb "device offline"
- 【工具向】Android UDP与TCP工具类
- 搜索 继续畅通工程 problem e
- UVA10305 欢迎LFX学弟
- 用七宗罪的角度理解用户需求
- LinearLayout边框,圆角
- 用栈来表示队列
- GRASP----(职责分配原则)
- Http1.1和Http1.0的区别
- 用公众号赚钱,我们还有机会吗
- 浅谈Get和POST区别