hdu 5253 连接的管道(kruskal)
来源:互联网 发布:淘宝如何好评截图 编辑:程序博客网 时间:2024/06/05 07:28
最小生成树,在图要求全部联通的情况下求最短的权值,用最短路。想用搜索之类的要考虑数据大小。
#include<iostream>#include<cstring>#include<cstdio>#include<cmath>#include<algorithm>using namespace std;struct node{ int x,y,len; bool operator < (const node &a) const { return len < a.len; }};const int N=1100;int x[N][N],m,n,k;int father[N*N];node ve[N*N*4];int Find(int x){ return x==father[x]?x:father[x]=Find(father[x]);}int Union(int x,int y){ int a=Find(x),b=Find(y); if(a!=b) { father[a]=b; return 1; } return 0;}int kruskal(){ node s; int sum=0; for(int i=0;i<k;i++) { if(Union(ve[i].x,ve[i].y)) sum+=ve[i].len; } return sum;}int main(){ int na,ca=1; scanf("%d",&na); while(na--) { k=0; scanf("%d%d",&m,&n); for(int i=0;i<m;i++) for(int j=0;j<n;j++) { node q; father[i*n+j]=i*n+j; scanf("%d",&x[i][j]); if(j>0) { q.x=i*n+j,q.y=i*n+j-1; q.len=abs(x[i][j]-x[i][j-1]); ve[k++]=q; } if(i>0) { q.x=i*n+j,q.y=i*n+j-n; q.len=abs(x[i][j]-x[i-1][j]); ve[k++]=q; } } sort(ve,ve+k); printf("Case #%d:\n",ca++); int xx=kruskal(); printf("%d\n",xx); } return 0;}
0 0
- hdu 5253 连接的管道(kruskal)
- hdu 5253连接的管道(kruskal)
- HDU-5253 连接的管道 (Kruskal)
- (最小生成树 Kruskal)HDU 5253 连接的管道
- hdu 5253 连接的管道(kruskal)(2015年百度之星程序设计大赛 - 初赛(2))
- HDU 5253 连接的管道(最小生成树-Kruskal+并查集)
- HDU 5253 连接的管道(kruskal+状态压缩+二维转化为一维)
- HDU 5253 连接的管道
- HDU 5253 连接的管道
- hdu 5253 连接的管道
- HDU 5253 连接的管道
- HDU 5253 连接的管道
- 【HDU 5253 连接的管道】
- HDU 5253:连接的管道
- HDU 5253 连接的管道
- HDU 5253-连接的管道
- hdoj 5253 连接的管道 (最小生成树-kruskal)
- 连接的管道-HDU
- Rhino脚本引擎
- Delphi,在DelphiXE下使用DirectX的初步摸索
- Angular find controller from element or no element
- 添加本机jdk到MyEclipse默认
- 欢迎使用CSDN-markdown编辑器
- hdu 5253 连接的管道(kruskal)
- Spring学习之Bean的自动装配(非注解)
- 【机房收费系统】——收官
- POJ 1679 最小生成树是否唯一 次小生成树
- UIView添加点击事件
- Ambari-Metrics配置指南
- class类名命名规则
- Java中Synchronized的用法
- Spring中控制反转怎么配置的?比如Action类有个成员变量TestService testService,Action类就可以直接用TestServiceIMP中的方法了