atcoder ABC237-E Skiing

传送门

这题把一个点到另外一个点的开心值变为这条边的权值,就可以化为求最大路。因为有负边权,所以要用\(SPFA\),但\(SPFA\)这玄学的时间复杂度,会\(wa\)一个点,就很烦。

我们作一个图,如下:

我们把下降的距离设为\(down\),把上升距离的设为\(up\),这里的\(up\)和\(down\)为真实距离。

所以不难发现此式:

\[h_x+up-down=h_y
\]
\[h_x-hy+up=down
\]

又开心值计算公式为:

\[down-2up
\]

将\(down\)带入为:

\[h_x-h_y+up-2up=h_x-h_y-up
\]

所以我们可以把上升的边权换为\(up\),下降的边权换为0。

用堆优化DIJ来求一个最短路,而到每个点的开心值就是\(h_x-h_y-dis_y\)。

因为你去到某个点的开心值为正,那么回去1号点的开心值就一定不为正。

CODE

#include <bits/stdc++.h>
using namespace std; #define ll long long const int maxn=2*1e5+5; struct node
{
ll to,nxt,val;
}edge[maxn*2]; ll INF=1e18; ll n,m,tot,ans;
ll h[maxn],head[maxn],dis[maxn],vis[maxn]; priority_queue< pair<int,int> >q; void add(ll x,ll y,ll z)
{
++tot;
edge[tot].to=y;
edge[tot].val=z;
edge[tot].nxt=head[x];
head[x]=tot;
}
void dij()
{
for(int i=1;i<=n;i++) dis[i]=INF;
dis[1]=0;
q.push({-dis[1],1});
for(int i=1;i<=n;i++)
{
if(q.empty()==1) return ;
while(vis[q.top().second])//堆优化
{
q.pop();
}
vis[q.top().second]=1;
pair<int,int> k=q.top();
q.pop();
k.first=-k.first;
ans=max(ans,h[1]-h[k.second]-dis[k.second]);
for(int j=head[k.second];j;j=edge[j].nxt)
{
ll v=edge[j].to;
if(dis[v]>dis[k.second]+edge[j].val)
{
dis[v]=dis[k.second]+edge[j].val;
q.push({-dis[v],v});
}
}
}
} int main()
{
scanf("%lld%lld",&n,&m);
for(int i=1;i<=n;i++)
{
scanf("%lld",&h[i]);
}
for(int i=1;i<=m;i++)//初始化图
{
ll x,y;
scanf("%lld%lld",&x,&y);
add(x,y,max((long long)0,h[y]-h[x]));
add(y,x,max((long long)0,h[x]-h[y]));
}
dij();
printf("%lld",ans);
}

atcoder ABC237-E Skiing的更多相关文章

  1. 2022年5月5日模拟赛题解与总结(ABC237)

    总结 初一第一,竞赛班第二 还可以,为了照顾提高班来的四个同学放了四个水题,可惜他们做的不是很理想,希望他们下次可以获得满意的成绩 这次做的其实是 AtCoder ABC237 A.Not Overf ...

  2. AtCoder Regular Contest 061

    AtCoder Regular Contest 061 C.Many Formulas 题意 给长度不超过\(10\)且由\(0\)到\(9\)数字组成的串S. 可以在两数字间放\(+\)号. 求所有 ...

  3. AtCoder Grand Contest 001 C Shorten Diameter 树的直径知识

    链接:http://agc001.contest.atcoder.jp/tasks/agc001_c 题解(官方): We use the following well-known fact abou ...

  4. nyoj 10 skiing(记忆化搜索)

    skiing 时间限制:3000 ms  |  内存限制:65535 KB 难度:5   描述 Michael喜欢滑雪百这并不奇怪, 因为滑雪的确很刺激.可是为了获得速度,滑的区域必须向下倾斜,而且当 ...

  5. skiing(搜索+记忆化搜索)

    skiing 时间限制:3000 ms  |  内存限制:65535 KB 难度:5   描述 Michael喜欢滑雪百这并不奇怪, 因为滑雪的确很刺激.可是为了获得速度,滑的区域必须向下倾斜,而且当 ...

  6. NYOJ10,skiing

    skiing 时间限制:3000 ms  |  内存限制:65535 KB 难度:5 描写叙述 Michael喜欢滑雪百这并不奇怪, 由于滑雪的确非常刺激.但是为了获得速度,滑的区域必须向下倾斜,并且 ...

  7. ACM Skiing问题

    ACM Skiing问题 描述 Michael喜欢滑雪百这并不奇怪, 因为滑雪的确很刺激.可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你.Michae ...

  8. 2017 ACM-ICPC(乌鲁木齐赛区)网络赛 H.Skiing 拓扑排序+最长路

    H.Skiing In this winter holiday, Bob has a plan for skiing at the mountain resort. This ski resort h ...

  9. AtCoder Regular Contest 082

    我都出了F了……结果并没有出E……atcoder让我差4分上橙是啥意思啊…… C - Together 题意:把每个数加1或减1或不变求最大众数. #include<cstdio> #in ...

  10. AtCoder Regular Contest 069 D

    D - Menagerie Time limit : 2sec / Memory limit : 256MB Score : 500 points Problem Statement Snuke, w ...

随机推荐

  1. 将workbench 导出的sql数据修改为 oracle 的sql版本

    将导出的文件内容复制到 dd1.txt,或其它文件,修改path的值即可 修改后的sql文件为 dd1.sql : 替换的内容: 1. 全局替换了一些字符串,如` 2. workbench导出的sql ...

  2. compileSdkVersion, minSdkVersion 和 targetSdkVersion,傻傻分不清楚【转】

    原文 https://blog.csdn.net/gaolh89/article/details/79809034 在Android Studio项目的app/build.gradle中,我们可以看到 ...

  3. sicp每日一题[1.42]

    Exercise 1.42 Let f and g be two one-argument functions. The composition f after g is defined to be ...

  4. 【LLM训练系列】从零开始训练大模型之Phi2-mini-Chinese项目解读

    一.前言 本文主要是在复现和实践Phi2-mini-Chinese后,简要分析下Phi2-mini-Chinese这个项目,做一个学习实战总结. 原文发布于知乎:https://zhuanlan.zh ...

  5. 运输小猫娘之再续 5k 传奇之寻找人道主义素数

    原文 前情提要 本章主角 5k_sync_closer 第一章 从再续前缘到苦心寻找满足最优条件的人道主义美丽素数 上回书说到,5k 因为拯救大家被炸断了 \(1000000007\) 米中的十五千米 ...

  6. 【赵渝强老师】Redis案例分析:用setbit统计活跃用户

    一.需求背景 首先,我们来看一下需求:网站统计用户登录的次数,具体如下: 网站有1亿个用户,有经常登录的,也有不经常登录的 如何来记录用户的登录信息 如何查询活跃用户:比如:一周内,登录3次的 二.使 ...

  7. /sys/kernel/debug/binder/目录下主要节点含义

    /sys/kernel/debug/binder/目录下主要节点含义 state 显示binder设备的整体状态信息 包括进程数量.线程数量.待处理事务数量等 stats 展示binder操作的统计信 ...

  8. ptmalloc、tcmalloc与jemalloc对比分析

    背景介绍 在开发微信看一看期间,为了进行耗时优化,基础库这层按照惯例使用tcmalloc替代glibc标配的ptmalloc做优化,CPU消耗和耗时确实有所降低.但在晚上高峰时期,在CPU刚刚超过50 ...

  9. vue前端使用nexus配置npm私有仓库

    当我们运行前端项目的时候,常常在解决依赖的时候会加上一个参数npm install --registry=https://registry.npm.taobao.org将源指定为淘宝的源,以期让速度加 ...

  10. ios中文件夹文件的创建和删除

    //1.文件夹.文件的创建和删除 NSFileManager *fileManager=[NSFileManager defaultManager]; NSString *filePath=@&quo ...