【洛谷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的同学们为了庆祝春节,准备排练一场舞会. 题目描述 在越来越讲究合作的时代,人们注意的更多的不是个人物的舞姿,而是集体的排列. 为了配合每年的倒计时,同学们决定排出——“数字舞蹈 ...
随机推荐
- rownum与row_number() OVER (PARTITION BY COL1 ORDER BY COL2)
1)rownum 为查询结果排序.使用rownum进行排序的时候是先对结果集加入伪列rownum然后再进行排序 select rownum n, a.* from ps_user a order by ...
- Json.NET如何避免循环引用
Json.NET在将对象序列化为Json字符串的时候,如果对象有循环引用的属性或字段,那么会导致Json.NET抛出循环引用异常. 有两种方法可以解决这个问题: 1.在对象循环引用的属性上打上[Jso ...
- c# Login UI with background picture animation
准备4张图片 UI control: <Grid x:Class="Test1.MainBgAd" xmlns="http://schemas.microsoft. ...
- vue-cli 动态绑定图片失败
1.template 中引用图片,第一个为固定路径,第二个为动态绑定路径 eg: <img src="XXXXXX.png" alt=""> < ...
- MiZ702学习笔记10——文本实例化IP的方法
之前,添加vivado自带IP的时候,都是以图形化的方式:一般是新建一个Block Design顶层文件,然后将图形化的ip贴到,Block Design中. 但是,在进行PL的开发过程中,有时不想使 ...
- LeetCode Letter Combinations of a Phone Number (DFS)
题意 Given a digit string, return all possible letter combinations that the number could represent. A ...
- tree的使用,显示行号,find命令应用
第1章 linux启动过程 1.开机自检bios 2.mbr引导 3.GRUB 菜单:选择不同的内核 4.加载内核 5.运行init进程 6.读取/etc/inittab运行级别配置文件 7.执行 / ...
- jersey2 整合 spring + hibernate + log4j2
整合 spring jersey2 官方还未正式支持 spring4, 但网上有好多支持方案,折腾了一圈后,还是用了 spring3; pom 添加以下依赖配置 <!-- Spring --&g ...
- DFA化简
首先是未化简DFA的转换表 NFA状态 DFA状态 a b {0,1,2,4,7} A B C {1,2,3,4,6,7,8} B B D {1,2,4,5,6,7} C B C {1,2,4,5,6 ...
- unity中利用纯物理工具制作角色移动跳跃功能
using System.Collections;using System.Collections.Generic;using UnityEngine; public class Player : M ...