http://acm.hdu.edu.cn/showproblem.php?pid=5253

#include <iostream>
#include <bits/stdc++.h>
#define MAX 1001
using namespace std;
int Map[MAX][MAX];
struct node
{
int a,b,c;
};
struct node e[MAX*MAX*+];
int n,m;
int num = ;
void add(int i,int j)
{
if(i<n)
{
e[num].a = (i-)*m+j;
e[num].b = i*m+j;
e[num].c = abs(Map[i][j]-Map[i+][j]);
num++;
}
if(j<m)
{
e[num].a = (i-)*m+j;
e[num].b = (i-)*m+(j+);
e[num].c = abs(Map[i][j]-Map[i][j+]);
num++;
}
}
bool cmp(node a,node b)
{
return a.c<b.c;
}
int p[MAX*MAX];
int find(int x)
{
return p[x]==x?x:p[x] = find(p[x]);
}
int main()
{
int T;
scanf("%d",&T);
for(int k=;k<=T;k++)
{ scanf("%d%d",&n,&m);
for(int i=;i<=n;i++)
{
for(int j=;j<=m;j++)
{
scanf("%d",&Map[i][j]);
}
}
num=;
for(int i=;i<=n;i++)
{
for(int j=;j<=m;j++)
{
add(i,j);
}
}
sort(e+,e+num,cmp);
for(int i=;i<=n*m;i++)
p[i] = i;
int sum = ;
int edges = ;
for(int i=;i<num;i++)
{
int x = find(e[i].a);
int y = find(e[i].b);
if(x!=y)
{
edges++;
sum+=e[i].c;
p[x] = y;
}
if(edges==n*m-)
break;
}
printf("Case #%d:\n%d\n",k,sum);
}
return ;
}

个人失误总结:sort排序范围要严格。

最新文章

  1. Linux服务器安全配置
  2. BAD APPLE C++控制台程序
  3. 【MongoDB】递归获取字段更新表达式,更新复杂数据类型对象
  4. vim 编辑
  5. FreeRTOS和Ucos在任务优先级的区别
  6. 【原】requirejs学习笔记
  7. JavaScript基本类型值与引用类型值
  8. How to understand ReferenceGroup control on Form[AX2012]
  9. [转].net连oracle的问题及方法折腾总结 连接字串
  10. Lucene 排序 Sort与SortField
  11. 构建jenkins
  12. Elasticsearch - 快速入门
  13. 经度和纬度在SQL中的数据类型
  14. B+树的Copy-on-Write设计
  15. vb程序安装时需要在客户端安装MSSOAP30.dll,但注册不上,请问怎么处理
  16. Chrome部分站点无法启用Flash问题
  17. python 实现求一个集合的子集
  18. acrgis导出成tiff图片,全是黑色
  19. suoi38 卖XY序列 (贪心+前缀和)
  20. shell命令——if

热门文章

  1. E20180420-hm
  2. 分析spring aop的源码实现
  3. Python解释器的安装步骤
  4. vim normal 模式下L键
  5. oracle错误:1067进程意外终止
  6. AtCoder Regular Contest 062 E - AtCoDeerくんと立方体づくり / Building Cubes with AtCoDeer
  7. Codeforces Round #324 (Div. 2)
  8. double发生精度丢失的解决办法
  9. php 缩略图
  10. RHEL 6.5 ----Postfix邮件服务器