杭电5253连接的管道
连接的管道
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 1643 Accepted Submission(s): 603
现在给出老 Jack农田的数据,你需要告诉老 Jack 在保证所有农田全部可连通灌溉的情况下,最少还需要再购进多长的管道。另外,每块农田都是方形等大的,一块农田只能跟它上下左右四块相邻的农田相连通。
输入包含若干组测试数据,处理到文件结束。每组测试数据占若干行,第一行两个正整数 N,M(1≤N,M≤1000),代表老 Jack 有N行*M列个农田。接下来 N 行,每行 M 个数字,代表每块农田的高度,农田的高度不会超过100。数字之间用空格分隔。
第一行输出:"Case #i:"。i代表第i组测试数据。
第二行输出 1 个正整数,代表老 Jack 额外最少购进管道的长度。
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<algorithm>
using namespace std;
struct node//库鲁斯卡尔算法
{int start;int end;int cost;
}t[2010000];
int cmp(node a,node b)
{return a.cost<b.cost;
}
int per[1010*1010];
int map[1010][1010];
int find(int x)
{int r=x;if(per[r]==r)return r;return per[r]=find(per[r]);
}
int join(int x,int y)
{int fx=find(x);int fy=find(y);if(fx!=fy){per[fx]=fy;return 1;} return 0;
}
int m,n,i,j,k,l,p,flag=1;
int main()
{scanf("%d",&p);while(p--){memset(t,0,sizeof(t));memset(map,0,sizeof(map));scanf("%d%d",&m,&n);for(i=0;i<=n*m+m+n;i++)per[i]=i;for(i=1;i<=m;i++)for(j=1;j<=n;j++)scanf("%d",&map[i][j]);int sum=0;for(i=1;i<m;i++)//建图时只需要判断一个点的右边和下边即可,并双向建图; for(j=1;j<n;j++){t[sum].start=n*i+j-n;//当前点 t[sum].end=n*i+j+1-n;//当前点右边的点 t[sum++].cost=abs(map[i][j]-map[i][j+1]);//t[sum].end=n*i+j-n;//原先建的双向图,其实不需要 ,所以超内存的问题就解决了 //t[sum].start=n*i+j+1-n;// t[sum++].cost=abs(map[i][j]-map[i][j+1]);t[sum].start=n*i+j-n;//当前点 t[sum].end=n*i+j+n-n;//当前点下边的点 t[sum++].cost=abs(map[i][j]-map[i+1][j]);//t[sum].end=n*i+j-n;// t[sum].start=n*i+j+n-n;// t[sum++].cost=abs(map[i][j]-map[i+1][j]);}for(j=1;j<n;j++)//针对最后一行 {t[sum].start=n*m+j-n;t[sum].end=n*m+j-n+1;//只需判断当前点右边的点 t[sum++].cost=abs(map[m][j]-map[m][j+1]);//t[sum].end=n*m+j-n;//t[sum].start=n*m+j-n+1;//t[sum++].cost=abs(map[m][j]-map[m][j+1]);}for(i=1;i<m;i++)//针对最后一列 {t[sum].start=i*n;t[sum].end=i*n+n;//只需判断当前点下边的店即可 t[sum++].cost=abs(map[i][n]-map[i+1][n]);t[sum].end=i*n;t[sum].start=i*n+n;t[sum++].cost=abs(map[i][n]-map[i+1][n]);}sort(t,t+sum,cmp);__int64 ans=0;for(i=0;i<sum;i++){if(join(t[i].start,t[i].end))ans+=t[i].cost;}printf("Case #%d:\n",flag++); printf("%I64d\n",ans);}return 0;
}
杭电5253连接的管道相关推荐
- 杭电 1272 poj 1308 小希的迷宫
这道题是我学了并查集过后做的第三个题,教我们的学姐说这是并查集的基础题,所以有必要牢牢掌握. 下面就我做这道题的经验,给大家一些建议吧!当然,我的建议不是最好的,还请各位大神指出我的错误来,我也好改正 ...
- 杭州电子科技大学-杭电信标一队
第一章 引言 全国大学生智能汽车竞赛是一项面向全国大学生以智能汽车为研究对象的科技竞赛,以"立足培养,重在参与,鼓励探索, 追求卓越"为指导思想.比赛形式有信标组.创意组等多种. ...
- 杭电1325java实现
题目链接 问题描述 树是一个众所周知的数据结构,它可以是空的(null,void,nothing),也可以是一组由节点之间的有向边连接起来的一个或多个节点,满足以下属性. 只有一个节点称为根,没有有向 ...
- 杭电1232 畅通工程
Problem Description 某省调查城镇交通状况,得到现有城镇道路统计表,表中列出了每条道路直接连通的城镇.省政府"畅通工程"的目标是使全省任何两个城镇间都可以实现交通 ...
- 17届技术报告 | 杭电四轮点此一队
01 引言 1.1 概述 全国大学生智能车竞赛以"立足培养,重在参与,鼓励探索,追求卓越"为指导思想,涵盖了机械.模式识别.电子.电气.传感技术.计算机.自动化控制.汽车理论等多方 ...
- 2021杭电多校第八场补题
比赛传送门:Contest Problem List (hdu.edu.cn) 1006)GCD Game 题目翻译:爱丽丝和鲍勃正在玩游戏. 他们轮流操作.有n个数字,a1,a2,...,an.每次 ...
- 2022杭电多校赛第八场
2022杭电多校赛第八场 文章目录 2022杭电多校赛第八场 1004.Quel'Thalas 1001.Theramore 1011.Stormwind 1008.Orgrimmar 1005.Ir ...
- 2022“杭电杯”中国大学生算法设计超级联赛(8)
2022"杭电杯"中国大学生算法设计超级联赛(8) [题目链接](Search Result (hdu.edu.cn)) D Quel'Thalas 题目大意 在二维平面上,[0, ...
- 杭电1856——并差集
杭电1856--并差集 原题传送门,并差集的简单介绍,大佬并差集详解. 解题思路: 这个算并差集的裸题吧.先将输入的数据(还没有连接的数据)全部用meg函数连起来,然后用fin函数遍历每个男孩最上面的 ...
最新文章
- mysql的索引优化_MySQL索引优化与分析(重要)
- pyglet and opengl -- 纹理映射以及动画
- 10.MYSQL:什么是事务?事务的性质?事务的应用?
- flask和ajax,Flask flash和url_用于AJAX
- 常见开发需求之前端利器webstorm中的git和快捷键
- linux 常用命令及操作
- 2019-OO-第二单元总结
- (转)Spring Boot 2(一):【重磅】Spring Boot 2.0权威发布
- vue中v-model的使用
- C# windows身份验证的连接字符串!
- Deepin linux 15.9.1 Ubuntu 16.04 安装zsteg、gem
- php滑动门效果,js实现简洁的TAB滑动门效果代码
- 用导入导出模板生成系统标准功能单据--销售订单
- 移动端用户设置字体放大导致的问题
- 帅地鸽了大半年,一个专注于面试、基础知识、算法的小破站上线了
- 阿里巴巴erp【商业化操作系统】什么是erpadmin
- JDBC Statement RETURN_GENERATED_KEYS返回自动生成的ID
- 2012春节回乡见闻
- 【说透中台】05 | D4模型:中台规划建设方法论概述
- 有没有人可以帮我解析一下下面的json
热门文章
- 安卓中的@Nullable和NonNull(NotNull) 等 注释
- 崛起于Springboot2.X之redis集群搭建(17)
- 右键打开方式添加应用程序无法设置
- at/cron计划任务初解
- NEON在Android中的使用举例【转】
- 如何重置 RHEL7/CentOS7 系统的密码
- 《MPLS在Cisco IOS上的配置》一第 1 章 MPLS概述1.1 IP转发过程概述
- struts2 OGNL表达式
- C# WinForm WebBrowser (三) 编辑模式
- linux ----Inode的结构图