hdu5253 MST
连接的管道
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 2708 Accepted Submission(s):
961
决定用管道将他的所有相邻的农田全部都串联起来,这样他就可以从远处引水过来进行灌溉了。当老 Jack 买完所有铺设在每块农田内部的管道的时候,老 Jack
遇到了新的难题,因为每一块农田的地势高度都不同,所以要想将两块农田的管道链接,老 Jack
就需要额外再购进跟这两块农田高度差相等长度的管道。
现在给出老 Jack农田的数据,你需要告诉老 Jack
在保证所有农田全部可连通灌溉的情况下,最少还需要再购进多长的管道。另外,每块农田都是方形等大的,一块农田只能跟它上下左右四块相邻的农田相连通。
,代表输入的样例组数
输入包含若干组测试数据,处理到文件结束。每组测试数据占若干行,第一行两个正整数 N,M(1≤N,M≤1000)
,代表老 Jack 有N行*M列个农田。接下来 N 行,每行 M 个数字,代表每块农田的高度,农田的高度不会超过100。数字之间用空格分隔。
第一行输出:"Case
#i:"。i代表第i组测试数据。
第二行输出 1 个正整数,代表老 Jack 额外最少购进管道的长度。
4 3
9 12 4
7 8 56
32 32 43
21 12 12
2 3
34 56 56
12 23 4
82
Case #2:
74
#include<bits/stdc++.h>
using namespace std;
const int maxn=1005;
int f[maxn*maxn];
short h[maxn][maxn]; //height<100,用short节约内存不然会爆(或者用结构体可以少一个r数组)
int u[2*maxn*maxn],v[2*maxn*maxn],w[2*maxn*maxn],r[2*maxn*maxn]; //最大点数1000*1000,所以最多有2*1000*1000条边
int fx[4][2]={{-1,0},/*{1,0},*/{0,-1}/*,{0,1}*/}; //易得只要求左边相邻和上边相邻的点的距离即可表示出所有的边
bool cmp(int i,int j)
{
return w[i]<w[j];
}
int find(int v)
{
return f[v]==v?v:f[v]=find(f[v]);
}
int main()
{
int n,m,i,j,t,k=0;
scanf("%d",&t);
while (t--){int p=0,ans=0,ml=0;
scanf("%d%d",&n,&m);
for (i=1;i<=n*m;i++) f[i]=i;
for (i=1;i<=n;i++){
for (j=1;j<=m;j++){
scanf("%d",&h[i][j]);
//cout<<"fuck"<<endl;
for (int xt=0;xt<2;xt++){
int dx=i+fx[xt][0];
int dy=j+fx[xt][1];
if (dx<1||dy<1||dx>n||dy>m) continue;
ml++;
r[++p]=ml;
u[p]=(i-1)*m+j; //u,v中存的是点的标号(1,2,3,4,5.......n*m),所以记得将二维坐标转化为一维,就是这里坑死我了= =
v[p]=(dx-1)*m+dy;
w[p]=abs(h[i][j]-h[dx][dy]);
//cout<<u[p]<<" "<<v[p]<<" "<<w[p]<<endl;
}
}
}
int temp=0;
sort(r+1,r+p+1,cmp);
for (i=1;i<=p;i++){
int e=r[i];
int x=find(u[e]);
int y=find(v[e]);
if (x!=y) {temp++;
ans+=w[e];
f[x]=y;
}
if (temp==n*m-1) break;
//for (int ki=1;ki<=n*m;ki++) cout<<f[ki]<<" ";cout<<endl;
}
printf("Case #%d:\n%d\n",++k,ans);
}
return 0;
}
hdu5253 MST的更多相关文章
- POJ1679 The Unique MST[次小生成树]
The Unique MST Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 28673 Accepted: 10239 ...
- 基于MST的立体匹配及相关改进(A Non-Local Cost Aggregation Method for Stereo Matching)
怀着很纠结的心情来总结这篇论文,这主要是因为作者提虽然供了源代码,但是我并没有仔细去深究他的code,只是把他的算法加进了自己的项目.希望以后有时间能把MST这一结构自己编程实现!! 论文题目是基于非 ...
- BZOJ 2654 & 玄学二分+MST
题意: 给一张图,边带权且带颜色黑白,求出一棵至少包含k条白边的MST SOL: 正常人都想优先加黑边或者是白边,我也是这么想的...你看先用白边搞一棵k条边的MST...然后维护比较黑边跟白边像堆一 ...
- LA 5713 秦始皇修路 MST
题目链接:http://vjudge.net/contest/144221#problem/A 题意: 秦朝有n个城市,需要修建一些道路使得任意两个城市之间都可以连通.道士徐福声称他可以用法术修路,不 ...
- [poj1679]The Unique MST(最小生成树)
The Unique MST Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 28207 Accepted: 10073 ...
- [BZOJ2654]tree(二分+MST)
题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=2654 分析:此题很奇葩,我们可以给所有白边加上一个权值mid,那么在求得的MST中白边 ...
- CodeForces 125E MST Company
E. MST Company time limit per test 8 seconds memory limit per test 256 megabytes input standard inpu ...
- 2015baidu复赛2 连接的管道(mst && 优先队列prim)
连接的管道 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submi ...
- ACM/ICPC 之 判别MST唯一性-Kruskal解法(POJ1679)
判别MST是否唯一的例题. POJ1679-The Unique MST 题意:给定图,求MST(最小生成树)是否唯一,唯一输出路径长,否则输出Not Unique! 题解:MST是否唯一取决于是否有 ...
随机推荐
- Unity VR编辑器――如上帝般创建VR内容,Project Soli google用雷达识别手势体积相当于一张 Mini SD 内存卡
Unity VR编辑器――如上帝般创建VR内容在GDC的一个活动中,Unity首席设计师Timoni West展示了最新的Unity VR编辑器的原型系统,让你如上帝般创建VR应用,从一片空白场景开始 ...
- DNS视图及压力测试(四)
Bind安全控制选项 Allow-transfer {}; #用于控制区域传送文件 Allow-query {}; #通常用于服务器是缓存名称服务器时,控制查询客户端 Allow-recursion ...
- Javascript 判断对象是否相等
在Javascript中相等运算包括"==","==="全等,两者不同之处,不必多数,本篇文章我们将来讲述如何判断两个对象是否相等? 你可能会认为,如果两个对象 ...
- Spring Boot 踩坑之路之 Configuration Annotation Proessor not found in classpath
1. 出现spring boot Configuration Annotation Proessor not found in classpath的提示是在用了@ConfigurationProper ...
- ms08_067攻击实验
ms08_067攻击实验 ip地址 开启msfconsole 使用search ms08_067查看相关信息 使用 show payloads ,确定攻击载荷 选择playoad,并查看相关信息 设置 ...
- STM32串口中断
在打开串口1中断后 待机唤醒功能,(PA0唤醒)等 系统挺运行问题? ??(2014.11.13)
- 过滤Windows文件名中的非法字符
转载:http://blog.csdn.net/infoworld/article/details/42033097 场景: 1. 通常生成文件时需要一个文件名,而生成文件名的方式可能是通过用户输入的 ...
- Python3基础 try-except else进行配合
Python : 3.7.0 OS : Ubuntu 18.04.1 LTS IDE : PyCharm 2018.2.4 Conda ...
- winform中splitter的用法
1.将winform分为三列 整个窗体分成可以自动调节的三列的做法:1.往窗体上丢两个panel控件其中:panelLeft——设置Dock属性为“left”,并调节好其宽度panelRight——设 ...
- 【文件readonly异常】异常退出编译文件,再次进入提示readonly
1.对于同一个文件如果上次已经打开,而未关闭的情况下,又打开该文件进行编辑时,会出现如下提醒: 这是由于已经打开但未闭关的文件,会在其目录下出现一个.swp的文件,由于是属于隐藏文件,可以用命令l. ...