HDU 5253 连接的管道
2015-09-20 20:17
302 查看
就是就最小生成树,就是有点坑人
#include<stdio.h> #include<string.h> #include<algorithm> #include<math.h> using namespace std; #define N 1005 int a ; int p[N*N]; int m,n; int L; struct node { int u,v,c; }t; struct node M[N*N*4];//这样更节约内存 int cmp(node p,node q) { return p.c<q.c; } int find(int k) { if(p[k]!=k) { return p[k]=find(p[k]); } else { return p[k]; } } int kus() { int i,sum=0,cnt=0; for(i=0; i<L; i++) { int x=find(M[i].u); int y=find(M[i].v); if(x!=y) { p[y]=x; sum+=M[i].c; cnt++; } if(cnt==m*n-1) return sum; } return sum; } int main() { int T; scanf("%d",&T); int k=1; while(T--) { scanf("%d%d",&m,&n); int i,j; L=0; for(i=0; i<m; i++) { for(j=0; j<n; j++) { scanf("%d",&a[i][j]); p[i*n+j]=i*n+j; if(i>0) { t.u=i*n+j; t.v=i*n+j-n; t.c=abs(a[i][j]-a[i-1][j]); M[L++]=t; } if(j>0) { t.u=i*n+j; t.v=i*n+j-1; t.c=abs(a[i][j]-a[i][j-1]); M[L++]=t; } } } sort(M,M+L,cmp); int sum=kus(); printf("Case #%d:\n",k++); printf("%d\n",sum); } return 0; }
相关文章推荐
- 阿里2015回顾面试招收学历(获得成功offer)
- 【UML】——类图关系讲解
- 技术人生:故事之四十 谁理解我
- Linux学习笔记之 加密解密介绍,以及运用Openssl创建私有CA
- 犀牛——第13章 13.4 兼容性和互用性
- 动态规划之Work Break
- JAVA中 @Override 的作用
- window对象的几个方法
- Linux学习之进程fork()与vfork()
- codeforces 5C C. Longest Regular Bracket Sequence(dp)
- 技术人生:故事之三十九 最怕人际关系
- java SE复习笔记26
- 分享整理的sql脚本
- 梦语浅谈
- 解决VMWare安装Linux Ubuntu不能正常联网的问题
- Bestcoders 56 Clarke and puzzle
- 转 Java final、static使用总结
- 技术人生:故事之三十七 码农也是人!
- 技术人生:故事之三十八 孤独的殉道者
- PHP+Nginx环境搭配