hdoj 2122 Ice_cream’s world III 【最小生成树】
2015-08-13 20:11
405 查看
Ice_cream’s world III
Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 1254 Accepted Submission(s): 414
[align=left]Problem Description[/align]
ice_cream’s world becomes stronger and stronger; every road is built as undirected. The queen enjoys traveling around her world; the queen’s requirement is like II problem, beautifies the roads, by which there are some ways from every
city to the capital. The project’s cost should be as less as better.
[align=left]Input[/align]
Every case have two integers N and M (N<=1000, M<=10000) meaning N cities and M roads, the cities numbered 0…N-1, following N lines, each line contain three integers S, T and C, meaning S connected with T have a road will cost C.
[align=left]Output[/align]
If Wiskey can’t satisfy the queen’s requirement, you must be output “impossible”, otherwise, print the minimum cost in this project. After every case print one blank.
[align=left]Sample Input[/align]
2 1 0 1 10 4 0
[align=left]Sample Output[/align]
10 impossible
代码:
Kruskal算法:
#include<stdio.h> #include<algorithm> using namespace std; struct record { int s,e,w; }num[10010]; bool cmp(record a,record b) { return a.w<b.w; } int per[1010]; int m,n; int init() { for(int i=0;i<n;i++) { per[i]=i; } } int find(int x) { int r; r=x; while(r!=per[r]) { r=per[r]; } per[x]=r; return r; } int join(int x,int y) { int fx=find(x); int fy=find(y); if(fx!=fy) { per[fx]=fy; return true; } return false; } int main() { int i,f,sum; while(scanf("%d%d",&n,&m)!=EOF) { f=1; sum=0; init(); for(i=0;i<m;i++) { scanf("%d%d%d",&num[i].s,&num[i].e,&num[i].w); } sort(num,num+m,cmp); for(i=0;i<m;i++) { if(join(num[i].s,num[i].e)) { sum+=num[i].w; f++; } } if(f!=n) printf("impossible\n\n"); else printf("%d\n\n",sum); } return 0; }
Prim算法:
#include<stdio.h> #include<string.h> #define INF 0x3f3f3f int map[1010][1010],low[1010],vis[1010]; int n,m; int init() { for(int i=0;i<n;i++) { for(int j=0;j<n;j++) { if(i==j) map[i][j]=map[j][i]=0; else map[i][j]=map[j][i]=INF; } } } void prim() { int i,j,min,next,sum=0; for(i=0;i<n;i++) { vis[i]=0; low[i]=map[0][i]; } vis[0]=1; for(i=1;i<n;i++) { min=INF; for(j=0;j<n;j++) { if(!vis[j]&&min>low[j]) { min=low[j]; next=j; } } if(min==INF) { printf("impossible\n\n"); return ; } vis[next]=1; sum+=min; for(j=0;j<n;j++) { if(!vis[j]&&low[j]>map[next][j]) { low[j]=map[next][j]; } } } printf("%d\n\n",sum); } int main() { int i,j,a,b,c; while(scanf("%d%d",&n,&m)!=EOF) { init(); for(i=0;i<m;i++) { scanf("%d%d%d",&a,&b,&c); if(map[a][b]>c) map[a][b]=map[b][a]=c; } prim(); } return 0; }
相关文章推荐
- 深度优先搜索——八皇后问题
- 从输入 URL 到页面加载完的过程中都发生了什么事情
- CF 508C///贪心
- 客户端操作zookeeper服务代码示例
- Objective-C中一个方法如何传递多个参数的理解
- POJ 1228 Grandpa's Estate
- The Swift Programming Language (基础部分)
- 1090. Highest Price in Supply Chain (25)
- C++对象模型——继承体系下的对象构造(第五章)
- Spring IoC 控制反转 DI依赖注入 以及常用注解
- 02 Python 起步 - 《Python 核心编程》
- Xamarin.Forms之OnElementPropertyChanged那些事
- 算法题: A+B和C (15)
- Codeforces 567E President and Roads
- hdu 1022 Train Problem I
- git 使用总结
- 排序算法系列——直接选择排序
- Network
- 两台Linux主机通信(服务器客户端搭建)
- Android Handler 异步消息处理机制