HDU 5253 最小生成树 kruscal
Description
现在给出老 Jack农田的数据,你需要告诉老 Jack 在保证所有农田全部可连通灌溉的情况下,最少还需要再购进多长的管道。另外,每块农田都是方形等大的,一块农田只能跟它上下左右四块相邻的农田相连通。
Input
输入包含若干组测试数据,处理到文件结束。每组测试数据占若干行,第一行两个正整数 $N, M (1 \leq N, M \leq 1000)$,代表老 Jack 有N行*M列个农田。接下来 N 行,每行 M 个数字,代表每块农田的高度,农田的高度不会超过100。数字之间用空格分隔。
Output
第一行输出:"Case #i:"。i代表第i组测试数据。
第二行输出 1 个正整数,代表老 Jack 额外最少购进管道的长度。
Sample Input
Sample Output
#include<bits/stdc++.h>
#include<algorithm>
#define ll __int64
#define mod 1e9+7
#define PI acos(-1.0)
#define bug(x) printf("%%%%%%%%%%%%%",x);
#define inf 1e8
using namespace std;
int t;
int n,m;
struct node
{
int l;
int w;
int r;
}N[];
int f[];
int mp[][];
int jishu;
int flag;
bool cmp(struct node aa,struct node bb)
{
if(aa.w<bb.w)
return true ;
return false;
}
int find(int root)
{
if(root!=f[root])
return f[root]=find(f[root]);
else
return f[root];
}
void unio (int xx,int yy)
{
int xxx=find(xx);
int yyy=find(yy);
if(xxx!=yyy)
f[xxx]=yyy;
}
void kruscal()
{
int ans=;
int gg=n*m;
for(int i=;i<jishu;i++)
{ int u=find(N[i].l);
int v=find(N[i].r);
if(u!=v)
{
gg--;
ans+=N[i].w;
unio(u,v);
}
if(gg==)
break;
}
printf("Case #%d:\n",flag++);
printf("%d\n",ans);
}
int main()
{
while(scanf("%d",&t)!=EOF)
{
flag=;
for(int i=;i<=t;i++)
{
jishu=;
scanf("%d %d",&n,&m);
for(int j=;j<=n;j++)
{
for(int k=;k<=m;k++)
{
f[(j-)*m+k]=(j-)*m+k;
scanf("%d",&mp[j][k]);
if(k>)
{
N[jishu].l=(j-)*m+k-;
N[jishu].r=(j-)*m+k;
N[jishu++].w=abs(mp[j][k]-mp[j][k-]);
}
if(j>)
{
N[jishu].l=(j-)*m+k;
N[jishu].r=(j-)*m+k;
N[jishu++].w=abs(mp[j][k]-mp[j-][k]);
}
}
}
sort(N,N+jishu,cmp);
kruscal();
}
}
return ;
}
HDU 5253 最小生成树 kruscal的更多相关文章
- hdu 5253 最小生成树
赤裸裸最小生成树,没啥说的,我用kruskal过的 /* * Author : ben */ #include <cstdio> #include <cstdlib> #inc ...
- HDU 5253 最小生成树(kruskal)+ 并查集
题目链接 #include<cstdio> #include<cmath> #include<cstring> #include<algorithm> ...
- HDU 1233(最小生成树)
HDU 1233(最小生成树 模板) #include <iostream> #include <algorithm> #include <cstdio> usin ...
- HDU 5253 连接的管道 (最小生成树)
连接的管道 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submi ...
- HDU 4786 最小生成树变形 kruscal(13成都区域赛F)
Fibonacci Tree Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)To ...
- HDU 1102 最小生成树裸题,kruskal,prim
1.HDU 1102 Constructing Roads 最小生成树 2.总结: 题意:修路,裸题 (1)kruskal //kruskal #include<iostream> ...
- hdu 5253 连接的管道
题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=5253 连接的管道 Description 老 Jack 有一片农田,以往几年都是靠天吃饭的.但是今年老 ...
- 【UVA 10307 Killing Aliens in Borg Maze】最小生成树, kruscal, bfs
题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=20846 POJ 3026是同样的题,但是内存要求比较严格,并是没有 ...
- poj 1251 poj 1258 hdu 1863 poj 1287 poj 2421 hdu 1233 最小生成树模板题
poj 1251 && hdu 1301 Sample Input 9 //n 结点数A 2 B 12 I 25B 3 C 10 H 40 I 8C 2 D 18 G 55D 1 E ...
随机推荐
- vue中的过滤器
过滤器 过滤器规则 Vue.js 允许你自定义过滤器,可被用于一些常见的文本格式化.过滤器可以用在两个地方: 双花括号插值{{}}和 v-bind 表达式 (后者从 2.1.0+ 开始支持).过滤器应 ...
- AJAXA进行分页(2)
查询功能是开发中最重要的一个功能,大量数据的显示,我们用的最多的就是分页. 在ASP.NET 中有很多数据展现的控件,比如用的最多的GridView,它同时也自带了分页的功能.但是我们知道用GridV ...
- 海量数据GPS定位数据库表设计
在开发工业系统的数据采集功能相关的系统时,由于数据都是定时上传的,如每20秒上传一次的时间序列数据,这些数据在经过处理和计算后,变成了与时间轴有关的历史数据(与股票数据相似,如下图的车辆行驶过程中的油 ...
- IOS后台执行
大多数应用程序进入后台状态不久后转入暂停状态.在这种状态下,应用程序不执行任何代码,并有可能在任意时候从内存中删除.应用程序提供特定的服务,用户可以请求后台执行时间,以提供这些服务. 判断是否支持多线 ...
- JZOJ 4737. 金色丝线将瞬间一分为二 二分答案
4737. 金色丝线将瞬间一分为二 Time Limits: 1000 ms Memory Limits: 262144 KB Detailed Limits Goto ProblemSet ...
- Vuejs中关于computed、methods、watch的区别。
Vue.js在模板表达式中限制了,绑定表达式最多只能有一条表达式,但某些数据需要一条以上的表达式运算实现,此时就可以将此数据放在计算属性(computed)当中. Vuejs中关于computed.m ...
- 04.VUE学习之v-text v-html
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http ...
- Thinkphp 支付宝插件的引入 和调用
本文版权归本宝宝所有 未得允许不得转载 下载地址传送门 https://doc.open.alipay.com/docs/doc.htm?spm=a219a.7629140.0.0.twLYka&am ...
- Python入门基础--变量与基本数据类型
变量 什么是变量 变量就是变化的量,变就是变化,量用于衡量描述对象的状态 为什么要有变量 程序执行的本质就是一系列状态的变化,变是程序执行的直接体现,所以我们需要有一种机制能够反映或者说是保存下来程序 ...
- 排列算法汇总(下一个排列,全排列,第K个排列)
一.下一个排列 首先,STL提供了两个用来计算排列组合关系的算法,分别是next_permutation和prev_permutation. next_permutation(nums.begin() ...