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