连接的管道

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 222    Accepted Submission(s): 75

Problem Description

Jack 有一片农田,以往几年都是靠天吃饭的。但是今年老天格外的不开眼,大旱。所以老 Jack
决定用管道将他的所有相邻的农田全部都串联起来,这样他就可以从远处引水过来进行灌溉了。当老 Jack 买完所有铺设在每块农田内部的管道的时候,老
Jack 遇到了新的难题,因为每一块农田的地势高度都不同,所以要想将两块农田的管道链接,老 Jack
就需要额外再购进跟这两块农田高度差相等长度的管道。

现在给出老 Jack农田的数据,你需要告诉老 Jack 在保证所有农田全部可连通灌溉的情况下,最少还需要再购进多长的管道。另外,每块农田都是方形等大的,一块农田只能跟它上下左右四块相邻的农田相连通。

 
Input
第一行输入一个数字T(T≤10),代表输入的样例组数

输入包含若干组测试数据,处理到文件结束。每组测试数据占若干行,第一行两个正整数 N,M(1≤N,M≤1000),代表老 Jack 有N行*M列个农田。接下来 N 行,每行 M 个数字,代表每块农田的高度,农田的高度不会超过100。数字之间用空格分隔。

 
Output
对于每组测试数据输出两行:

第一行输出:"Case #i:"。i代表第i组测试数据。

第二行输出 1 个正整数,代表老 Jack 额外最少购进管道的长度。

 
Sample Input
2
4 3
9 12 4
7 8 56
32 32 43
21 12 12
2 3
34 56 56
12 23 4
 
Sample Output
Case #1:
82
Case #2:
74

 #include<bits/stdc++.h>
const int M = 1e3 + , inf = 0x3f3f3f3f ;
int move[][] = {{,} , {,} , {-,} , {,-}} ;
struct node
{
int id , dis ;
bool operator < (const node &rhs) const {
return rhs.dis < dis ;
}
} ;
std::priority_queue <node> q ;
int d[M * M] ;
int mp[M][M] ;
int n , m , T ; void init ()
{
for (int i = ; i < M * M ; i ++) {
d[i] = inf ;
}
} void prim ()
{
while (!q.empty ()) q.pop () ;
for (int i = ; i < ; i ++) {
int x = move[i][] , y = move[i][] ;
if (x >= n || y >= m || x < || y < ) continue ;
int dis = fabs (mp[][] - mp[x][y]) ;
q.push ( (node) {x * m + y , dis} ) ;
d[x * m + y] = dis ;
}
d[] = - ;
int sum = ;
while (!q.empty ()) {
node ans = q.top () ;
int id = ans.id , dis = ans.dis ;
q.pop () ;
if (~ d[id] == ) continue ;
d[id] = - ;
sum += dis ;
for (int i = ; i < ; i ++) {
int sx = id / m , sy = id % m ;
int x = sx + move[i][] , y = sy + move[i][] ;
if (x >= n || y >= m || x < || y < ) continue ;
int _id = x * m + y , _dis = fabs (mp[sx][sy] - mp[x][y]) ;
if ( ~d[_id] && d[_id] > _dis) {
d[_id] = _dis ;
q.push ((node) {_id , _dis}) ;
}
}
// for (int i = 0 ; i < n * m ; i ++) printf ("%d , " , d[i]) ; puts ("") ;
}
printf ("%d\n" , sum) ;
} int main ()
{
//freopen ("a.txt" , "r" , stdin ) ;
scanf ("%d" , &T) ;
int cas = ;
while (T --) {
init () ;
printf ("Case #%d:\n" , cas ++) ;
scanf ("%d%d" , &n , &m) ;
for (int i = ; i < n ; i ++) {
for (int j = ; j < m ; j ++) {
scanf ("%d" , &mp[i][j]) ;
}
}
prim () ;
}
return ;
}

一看到就是mst,但是我被寒假集训时的写法深深伤害到,O(V^E) , 当时却跑得如此愉快。

赛后从岐哥听说prim能用优先队列优化:墨迹墨迹出了这个 92_prim , 复杂度为 O(E * logE)总体来说很漂亮=。=

还有就是预处理强迫症,一开始硬是找了个vector把整幅图去保存,结果mle到死,事实上根本不需要vector做预处理。

2015baidu复赛2 连接的管道(mst && 优先队列prim)的更多相关文章

  1. hdu 5253 连接的管道

    题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=5253 连接的管道 Description 老 Jack 有一片农田,以往几年都是靠天吃饭的.但是今年老 ...

  2. HDU 5253 连接的管道 (最小生成树)

    连接的管道 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submi ...

  3. HTTP协议----URI,URL,持久连接,管道与Cookie

    URI与URL有什么不同呢? URI:Universal Resource Identifier统一资源标志符 URL:Universal Resource Locator统一资源定位器 URI是用来 ...

  4. Kruskal 2015百度之星初赛2 HDOJ 5253 连接的管道

    题目传送门 /* 最小生成树(Kruskal):以权值为头,带入两个端点,自然的排序;感觉结构体的并查集很好看 注意:题目老头要的是两个农田的高度差,中文水平不好,题意理解成和平均值的高度差! */ ...

  5. hdu 5253 连接的管道(kruskal)(2015年百度之星程序设计大赛 - 初赛(2))

    连接的管道 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Subm ...

  6. HDU 5253 连接的管道(Kruskal算法求解MST)

    题目: 老 Jack 有一片农田,以往几年都是靠天吃饭的.但是今年老天格外的不开眼,大旱.所以老 Jack 决定用管道将他的所有相邻的农田全部都串联起来,这样他就可以从远处引水过来进行灌溉了.当老 J ...

  7. python Nosql-redis 连接、管道

    非关系型数据库和关系型数据库的差别: 非关系型数据库的优势: 性能NOSQL是基于键值对的,可以想象成表中的主键和值的对应关系,而且不需要经过SQL层的解析,所以性能非常高. 可扩展性同样也是因为基于 ...

  8. 2015baidu复赛 矩形面积(包凸 && ps:附quickhull模板)

    矩形面积 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

  9. MST(最小生成树)——Prim算法——HDU 1879-继续畅通工程

    Prim算法很好理解,特别是学完了迪杰斯特拉算法之后,更加能理解Prim的算法思想 和迪杰斯特拉算法差不多,由于最后要形成连通图,故任意指定一个点,作为初始点,遍历所有点,以当前最小权值的点(和迪杰斯 ...

随机推荐

  1. FZU 2184 逆序数还原

    传送门 Description 有一段时间Eric对逆序数充满了兴趣,于是他开始求解许多数列的逆序数(对于由1...n构成的一种排列数组a,逆序数即为满足i<j,ai>aj的数字对数),但 ...

  2. 精通javascript(看书笔记)

    变量的类型检查 //检测类型 var str = "Hello World"; if (typeof str=="string") {//使用typeof来判断 ...

  3. maven的环境搭建

    maven环境快速搭建 最近,开发中要用到maven,所以对maven进行了简单的学习. .关于maven是什么东东,请参考其它文章. ----------------准备工作------------ ...

  4. js021-Ajax与Comet

    js021-Ajax与Comet 本章内容: 使用XMLHttpRequet对象 使用XMLHttpRequet事件 跨域Ajax通信的限制 Ajax技术的核心是XMLHttpRequet对象 21. ...

  5. log4net 记录到数据库和本地文件

    1)配置代码 <?xml version="1.0" encoding="utf-8" ?> <configuration> <c ...

  6. jsp action中附件下载的写法

    //一些主要的包和类 import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java ...

  7. Zookeeper集群的安装和使用

    Apache Zookeeper 由 Apache Hadoop 的 Zookeeper 子项目发展而来,现已经成为 Apache 的顶级项目,它是一个开放源码的分布式应用程序协调服务,是Google ...

  8. 第六章 jQuery和ajax应用

    ajax是异步JavaScript和xml的简称. 一. ajax补白 优势 不足(不一定是不足) 不需要任何插件(但需要浏览器支持js) XMLHttpRequest对象在不同浏览器下有差异 优秀的 ...

  9. JS中两个重要的方法 call & apply 学习

    正题: Function.prototype.apply(instance,args)  //args 数组 Function.prototype.Call(instance,a1,a2)  //a1 ...

  10. WebGrid Helper with Check All Checkboxes

    WebGrid Helper with Check All Checkboxes myEvernote Link Tuesday, September 13, 2011ASP.NET ASP.NET ...