1005 ProblemE
来源:互联网 发布:触摸屏手写软件 编辑:程序博客网 时间:2024/05/16 14:02
题意:
省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可)。现得到城镇道路统计表,表中列出了任意两城镇间修建道路的费用,以及该道路是否已经修通的状态。现请你编写程序,计算出全省畅通需要的最低成本
测试输入包含若干测试用例。每个测试用例的第1行给出村庄数目N ( 1< N < 100 );随后的 N(N-1)/2 行对应村庄间道路的成本及修建状态,每行给4个正整数,分别是两个村庄的编号(从1编号到N),此两村庄间道路的成本,以及修建状态:1表示已建,0表示未建。当N为0时输入结束。
思路:
最小生成树,如果是联通的成本就是0,如果不联通成本就是他给的那个树,prim和kruskal都行,我感觉prim简单点 就用的prim。
#include<stdio.h>#include<string.h>#include<algorithm>#include<iostream>using namespace std;#define inf 0x3f3f3f3fint 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(cin>>n&&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(cin>>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++) { cin>>b>>c>>d>>sta; if(sta==0) map[b][c]=map[c][b]=d; else map[b][c]=map[c][b]=0; } sum=prim(); cout<<sum<<endl; } return 0;}
0 0
- 1005 ProblemE
- 1005 ProblemE
- probleme directshow wmv (手动创建graph)
- codeforces #397 problemE 解题报告 补题
- Mit der Dofus. ZIP loader.swf, Probleme? Lesen Sie weiter ..
- 2016sdau课程练习专题一 1004 problemE
- Codeforces Round #341 (Div. 2) problemE Wet Shark and Blocks 矩阵乘法 dp
- The 5th Zhejiang Provincial Collegiate Programming Contest---ProblemE:Easy Task
- 1005
- 1005
- 1005
- 1005
- 1005
- 1005
- 1005
- 1005
- 1005
- 1005
- PyCUDA学习日记1
- 【一天一道LeetCode】#95. Unique Binary Search Trees II
- Caffe train 卡在 loading mean file from :不动
- Android 背景动画
- 【android】:gridView设置监听事件
- 1005 ProblemE
- thinkphp3.2【url地址大小写设置】
- 启动报错:java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener
- Android的屏幕多样性支持
- Java多线程synchronized、ReentrantLock、ReentrantReadWriteLock 和StampedLock 的对比
- 装饰者
- Nginx负载均衡配置
- Excel -- 2. 公式与函数应用
- 雇主与员工的新型关系