【洛谷P4955 】[USACO14JAN]越野滑雪越野滑雪
题目链接:ヾ(≧∇≦*)ゝ
对于每一个点可以向它右边的点和下面的点连边,权值就为两个点的高度差
然后再把所有的边按边权从小到大排序,并查集加点
最后判断当前集合是否涵盖所有的航点,如果是,就输出最后一条边的边权,否则就继续加点
Code:
#include<bits/stdc++.h>
#define N 500001
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
int n,m,t,cnt,tt;ll ans;
int fa[N],ct[501][501];
int mp[501][501],sz[N],u[N];
struct dqy{ll v;int x,y;}w[N];
inline bool cmp(dqy a,dqy b){return a.v<b.v;}
int find(int x){return fa[x]==x?x:fa[x]=find(fa[x]);}
inline pii getpos(int num){
int x=num/m+(num%m!=0);
int y=num-(x-1)*m;
return make_pair(x,y);
}
int read(){
int x=0,f=1;char ch=getchar();
while(!isdigit(ch)){if(ch=='-')f=-f;ch=getchar();}
while(isdigit(ch)){x=x*10+ch-48;ch=getchar();}
return x*f;
}
signed main(){
n=read(),m=read();
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
mp[i][j]=read();
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
ct[i][j]=read(),tt+=ct[i][j];
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++){
if(j!=m){
w[++cnt].x=(i-1)*m+j;
w[cnt].y=w[cnt].x+1;
w[cnt].v=abs(mp[i][j]-mp[i][j+1]);
}
if(i!=n){
w[++cnt].x=(i-1)*m+j;
w[cnt].y=w[cnt].x+m;
w[cnt].v=abs(mp[i][j]-mp[i+1][j]);
}
}
sort(w+1,w+cnt+1,cmp);
for(int i=1;i<=n*m;i++) fa[i]=i;
for(int i=1;i<=n*m;i++){
sz[i]=1;pii now=getpos(i);
u[i]=ct[now.first][now.second];
}
for(int i=1;i<=cnt;i++){
int x=w[i].x,y=w[i].y;
int f1=find(x),f2=find(y);
if(f1==f2) continue;
sz[f1]+=sz[f2];
u[f1]+=u[f2];fa[f2]=f1;
if(u[f1]==tt){
ans=w[i].v;
break;
}
}
printf("%lld\n",ans);
return 0;
}
【洛谷P4955 】[USACO14JAN]越野滑雪越野滑雪的更多相关文章
- 洛谷P1434滑雪讲解
题源:[戳这里] 洛谷博客链接:[戳这里] 我觉得这道题主要方法应该有两种: 动态规划 搜索 下面会分别对这两种方法进行简述 一,动态规划法首先的想法是用L(i,j)表示从点(i,j)出发能到达的最长 ...
- USACO Section 1.3 题解 (洛谷OJ P1209 P1444 P3650 P2693)
usaco ch1.4 sort(d , d + c, [](int a, int b) -> bool { return a > b; }); 生成与过滤 generator&& ...
- 洛谷1640 bzoj1854游戏 匈牙利就是又短又快
bzoj炸了,靠离线版题目做了两道(过过样例什么的还是轻松的)但是交不了,正巧洛谷有个"大牛分站",就转回洛谷做题了 水题先行,一道傻逼匈牙利 其实本来的思路是搜索然后发现写出来类 ...
- 洛谷P1352 codevs1380 没有上司的舞会——S.B.S.
没有上司的舞会 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description Ural大学有N个职员,编号为1~N.他们有 ...
- 洛谷P1108 低价购买[DP | LIS方案数]
题目描述 “低价购买”这条建议是在奶牛股票市场取得成功的一半规则.要想被认为是伟大的投资者,你必须遵循以下的问题建议:“低价购买:再低价购买”.每次你购买一支股票,你必须用低于你上次购买它的价格购买它 ...
- 洛谷 P2701 [USACO5.3]巨大的牛棚Big Barn Label:二维数组前缀和 你够了 这次我用DP
题目背景 (USACO 5.3.4) 题目描述 农夫约翰想要在他的正方形农场上建造一座正方形大牛棚.他讨厌在他的农场中砍树,想找一个能够让他在空旷无树的地方修建牛棚的地方.我们假定,他的农场划分成 N ...
- 洛谷P1710 地铁涨价
P1710 地铁涨价 51通过 339提交 题目提供者洛谷OnlineJudge 标签O2优化云端评测2 难度提高+/省选- 提交 讨论 题解 最新讨论 求教:为什么只有40分 数组大小一定要开够 ...
- 洛谷P1371 NOI元丹
P1371 NOI元丹 71通过 394提交 题目提供者洛谷OnlineJudge 标签云端评测 难度普及/提高- 提交 讨论 题解 最新讨论 我觉得不需要讨论O long long 不够 没有取 ...
- 洛谷P1538迎春舞会之数字舞蹈
题目背景 HNSDFZ的同学们为了庆祝春节,准备排练一场舞会. 题目描述 在越来越讲究合作的时代,人们注意的更多的不是个人物的舞姿,而是集体的排列. 为了配合每年的倒计时,同学们决定排出——“数字舞蹈 ...
随机推荐
- jqgrid 谈谈给表格设置列头事件、行事件、内容事件
往往我们需要给显示的jqgrid表格赋予事件功能,比如:列头事件.行事件.内容事件.需要的效果可能如下: 如你所见,以上的超链接和按钮均是绑定的事件.那分别如何实现这些事件的绑定呢? 一.行事件 行事 ...
- jqgrid 设置冻结列
有时,jqgrid表格的列非常多,而表格的宽度值是固定的,我们需要在表格底部出现滚动条,并且固定前面几个列作为数据参照项,如何实现? 需要用的jqgrid冻结列,步骤如下: 1)设置需要冻结的列属性, ...
- 将公钥部署到远程Git仓库(coding.net)
步骤: 1.下载git通用客户端并且安装. 2.右键,在弹出的对话框中选择Git Bash 3.创建本地ssha)在弹出的终端输入ssh-keygen -t rsa -C "username ...
- HBase启动时报错:/bin/java: No such file or directory6/bin/../bin/hbase: line 412: /usr/local/jdk1.8.0_152/bin/java
今天在启动HBase时发现如下错误:/bin/java: No such file or directory6/bin/../bin/hbase: line 412: /usr/local/jdk1. ...
- 详解分布式应用程序协调服务Zookeeper
主从结构:HDFS.Yarn.HBase.storm.spark.zookeeper都存在单点故障问题 hadoop1.x没有解决方案 hadoop2.x利用zookeeper实现HA zookeep ...
- Linux 网络监控工具 ss
ss命令用来显示处于活动状态的套接字信息.功能和netstat类似,但比netstat更快更高效. ss -h Usage: ss [ OPTIONS ] ss [ OPTIONS ] [ FILTE ...
- 大数据入门第二十二天——spark(三)自定义分区、排序与查找
一.自定义分区 1.概述 默认的是Hash的分区策略,这点和Hadoop是类似的,具体的分区介绍,参见:https://blog.csdn.net/high2011/article/details/6 ...
- 2017-2018-1 20155202 张旭 嵌入式C语言——时钟提取时分秒
2017-2018-1 20155202 张旭 嵌入式C语言--时钟提取时分秒 任务要求: 在作业本上完成附图作业,要认真看题目要求. 提交作业截图 作弊本学期成绩清零(有雷同的,不管是给别人传答案, ...
- 20155339 Exp5 MSF基础应用
20155339 Exp5 MSF基础应用 基础问题回答 用自己的话解释什么是exploit,payload,encode. 答: exploit是通过自己选择的漏洞和载荷进行攻击的一个过程. pay ...
- 【调试】Core Dump是什么?Linux下如何正确永久开启?
[调试]Core Dump是什么?Linux下如何正确永久开启?