HDU5253(最小生成树)
来源:互联网 发布:临沂最专业的淘宝培训 编辑:程序博客网 时间:2024/05/12 05:46
////最小生成树有很多种算法 习惯用并查集+克鲁斯卡尔// main.c// example//// Created by Adam on 15/2/2.// Copyright (c) 2015年 Adam. All rights reserved.//#include <iostream>#include "stdio.h"#include "stdlib.h"#include "string.h"#include "algorithm"#include <queue>using namespace std;int ss[1005][1005];int father[800000];int n,m;struct node { int op,ed; int ans;}edge[2000005];int find(int x){ if(x==father[x]) return x; else return father[x]=find(father[x]);}int cmp(node x,node y){ return x.ans<y.ans;}int main(){ int t,pos,len,ans,cnt=0; scanf("%d",&t); while(t--) { pos=0; scanf("%d%d",&n,&m); for(int i=0;i<n;i++) for(int j=0;j<m;j++) scanf("%d",&ss[i][j]); for(int i=0;i<n;i++) for(int j=0;j<m;j++) { if(j!=m-1){ edge[pos].op=i*m+j; edge[pos].ed=i*m+j+1; edge[pos++].ans=abs(ss[i][j]-ss[i][j+1]); } if(i!=n-1){ edge[pos].op=i*m+j; edge[pos].ed=i*m+m+j; edge[pos++].ans=abs(ss[i][j]-ss[i+1][j]); } } for(int i=0;i<n*m;i++) { father[i]=i; } sort(edge,edge+pos,cmp); len=0;ans=0; for(int i=0;i<pos;i++) { int a=edge[i].op; int b=edge[i].ed; a=find(a); b=find(b); if(a==b) continue; father[a]=b; len++; ans+=edge[i].ans; if(len==(n*m-1)) break; } printf("Case #%d:\n%d\n",++cnt,ans); } return 0;}
0 0
- hdu5253最小生成树
- HDU5253(最小生成树)
- hdu5253 连接的管道 最小生成树水题
- 最小比例 最小生成树
- 最小生成树&&次最小生成树
- 最小生成生成树计数
- 树+最小生成树
- 最小生成树
- 最小生成树 MST
- 最小生成树Kruskal
- kruskal 最小生成树
- 最小生成树
- 最小生成树
- 最小生成树
- 最小生成树
- 最小生成树 MST
- 最小生成树问题
- 最小生成树
- ios 后台录音权限设置
- LightOJ 1051 - Good or Bad(dp)
- SQL去空格
- LightOJ 1057 - Collecting Gold(dp)
- Ubuntu下配置samba服务器
- HDU5253(最小生成树)
- 关于js中单引号(')和双引号(")的使用以及转义的理解
- LightOJ 1060 - nth Permutation(dp)
- 百度智能硬件质量白皮书
- 左移<<,右移>>
- CSRF 攻击的应对之道
- 为什么需要日志审计系统
- JQuery hints
- 大数据架构和模式(一)大数据分类和架构简介 大数据架构和模式(二)如何知道一个大数据解决方案是否适合您的组织