zoj 1542 Network
2015-07-20 10:34
363 查看
#include <stdio.h> #include <string.h> #include <iostream> #include <algorithm> #include <vector> #include <queue> #include <set> #include <map> #include <string> #include <math.h> #include <stdlib.h> #include <time.h> using namespace std; struct data { int u,v; int w; } e[15000+5]; bool cmp(data a, data b) { return a.w<b.w; } int n,m,bin[5000]; int Find(int x) { int s; for(s=x; bin[s]>=0; s=bin[s]); while(s!=x) { int t=bin[x]; bin[x]=s; x=t; } return s; } void Union(int x1,int x2) { int f1=Find(x1),f2=Find(x2); int t=bin[f1]+bin[f2]; if(bin[f1]>bin[f2]) { bin[f1]=f2; bin[f2]=t; } else { bin[f2]=f1; bin[f1]=t; } } int main() { int i,j,num,u,v,ans[1000+24],maxe; while(~scanf("%d%d",&n,&m)) { if(n==0) break; for(i=0; i<=n; i++) bin[i]=-1; for(i=0; i<m; i++) scanf("%d%d%d",&e[i].u,&e[i].v,&e[i].w); sort(e,e+m,cmp); num=0; maxe=0; for(i=0; i<m; i++) { u=e[i].u; v=e[i].v; if(Find(u)!=Find(v)) { ans[num]=i; Union(u,v); num++; maxe=max(maxe,e[i].w); } if(num>=n-1) break; } printf("%d\n",maxe); printf("%d\n",num); for(i=0; i<num; i++) { printf("%d %d\n",e[ans[i]].u,e[ans[i]].v); } } return 0; }
相关文章推荐
- Java 反射机制 举例
- python之mail简单使用(html)
- Unity3D之打开Activity与调用JAVA代码传递参数
- activiti工作流(一)
- Css样式表和input框
- 关于position:absolute、relative及fixed浅析
- 开始刷leetcode day72:Binary Tree Postorder Traversal
- 十五天精通WCF——第十一天 如何对wcf进行全程监控
- c语言求最大公约数和最小公倍数
- log4j的使用
- fuck vim
- JAVA中AES加密方法实例分析
- IOS - 用户信息默认界面
- JNI错误总结(转)
- BroadcastReceiver
- poj 1274
- java:浅谈java环境变量
- Unity3d 简单计算器(OnGUI)
- 【grunt整合版】学会使用grunt打包前端代码
- 黑马程序员 第四篇 Java 网络编程 (Foundation; completed)