CCPC-Wannafly Winter Camp Day1 Div1 - 爬爬爬山 - [最短路][堆优化dijkstra]
题目链接:https://zhixincode.com/contest/3/problem/F?problem_id=39
样例输入 1
4 5 1
1 2 3 4
1 2 1
1 3 1
1 4 100
2 4 1
3 4 1
样例输出 1
6
题解:
这个体力感觉跟势能是个差不多的东西……很显然,如果没有降低山峰的能力,wls最多只能爬高度为 $h[1]+k$ 的山,更高的就爬不了。
因此,这个就是同时有点权和边权的最短路,只要在松弛有向边的时候判断一下该边的终点是否需要另外花费即可。
或者,换种更简单的思路来说,对于每条有向边,若其终点 $v$ 的山的高度超过 $h[1]+k$,那么该边边权额外增加 $(h[v] - h[1] - k)^2$。
AC代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<ll,int> P; //first是最短距离,second是节点编号
#define mk(x,y) make_pair(x,y) const int maxn=1e5+;
const ll INF=1e17; int n,m,k;
ll h[maxn]; struct Edge{
int u,v;
ll w;
};
vector<Edge> E;
vector<int> G[maxn];
void addedge(int u,int v,ll w)
{
E.push_back((Edge){u,v,w});
G[u].push_back(E.size()-);
} ll dist[maxn];
bool vis[maxn];
priority_queue< P, vector<P>, greater<P> > Q;
void dijkstra(int s,int t)
{
for(int i=;i<=n;i++) dist[i]=INF, vis[i]=;
dist[s]=, Q.push(mk(,s));
while(!Q.empty())
{
int u=Q.top().second; Q.pop();
if(vis[u]) continue;
vis[u]=;
for(auto x:G[u])
{
Edge &e=E[x]; int v=e.v;
if(vis[v]) continue;
if(dist[v]>dist[u]+e.w) dist[v]=dist[u]+e.w, Q.push(mk(dist[v],v));
}
}
} int main()
{
scanf("%d%d%d",&n,&m,&k);
for(int i=;i<=n;i++) scanf("%lld",&h[i]);
for(int i=;i<=m;i++)
{
int u,v; ll w,o;
scanf("%d%d%lld",&u,&v,&w);
o=; if(h[]+k<h[v]) o=(h[v]-h[]-k)*(h[v]-h[]-k);
addedge(u,v,w+o);
o=; if(h[]+k<h[u]) o=(h[u]-h[]-k)*(h[u]-h[]-k);
addedge(v,u,w+o);
}
dijkstra(,n);
cout<<dist[n]<<endl;
}
CCPC-Wannafly Winter Camp Day1 Div1 - 爬爬爬山 - [最短路][堆优化dijkstra]的更多相关文章
- 2020 CCPC Wannafly Winter Camp Day1 C. 染色图
2020 CCPC Wannafly Winter Camp Day1 C. 染色图 定义一张无向图 G=⟨V,E⟩ 是 k 可染色的当且仅当存在函数 f:V↦{1,2,⋯,k} 满足对于 G 中的任 ...
- 2020 CCPC Wannafly Winter Camp Day1 Div.1& F
#include<bits/stdc++.h> #define forn(i, n) for (int i = 0; i < int(n); i++) #define fore(i, ...
- 2020 CCPC Wannafly Winter Camp Day1 - I. K小数查询(分块)
题目链接:K小数查询 题意:给你一个长度为$n$序列$A$,有$m$个操作,操作分为两种: 输入$x,y,c$,表示对$i\in[x,y] $,令$A_{i}=min(A_{i},c)$ 输入$x,y ...
- CCPC-Wannafly Winter Camp Day1 Div1 - 夺宝奇兵 - [贪心+线段树]
题目链接:https://zhixincode.com/contest/3/problem/J?problem_id=43 样例输入 1 4 1110 11 110 21 210 31 315 415 ...
- Wannafly Winter Camp Day8(Div1,onsite) E题 Souls-like Game 线段树 矩阵乘法
目录 Catalog Solution: (有任何问题欢迎留言或私聊 && 欢迎交流讨论哦 Catalog @ Problem:传送门 Portal 原题目描述在最下面. 简单的 ...
- CCPC Wannafly Winter Camp Div2 部分题解
Day 1, Div 2, Prob. B - 吃豆豆 题目大意 wls有一个\(n\)行\(m\)列的棋盘,对于第\(i\)行第\(j\)列的格子,每过\(T[i][j]\)秒会在上面出现一个糖果, ...
- Wannafly Winter Camp Day5 Div1 E题 Fast Kronecker Transform 转化为NTT或FFT
目录 Catalog Solution: (有任何问题欢迎留言或私聊 && 欢迎交流讨论哦 Catalog @ Problem:传送门 原题目描述在最下面. 对给定的式子算解. ...
- 2020 CCPC Wannafly Winter Camp Day2-K-破忒头的匿名信
题目传送门 sol:先通过AC自动机构建字典,用$dp[i]$表示长串前$i$位的最小代价,若有一个单词$s$是长串的前$i$项的后缀,那么可以用$dp[i - len(s)] + val(s)$转移 ...
- 2020 CCPC Wannafly Winter Camp Day1-F-乘法
题目传送门 sol:二分答案$K$,算大于$K$的乘积有多少个.关键在于怎么算这个个数,官方题解上给出的复杂度是$O(nlogn)$,那么计算个数的复杂度是$O(n)$的.感觉写着有点困难,自己写了一 ...
随机推荐
- Java动态代理实现方法
import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflec ...
- [AaronYang]那天有个小孩跟我说Js-NodeJS[AY0]-EJS
按照自己的思路学习Node.Js 随心出发.EJS是Node.js中express框架中使用的一个模版引擎,当然还有Jade 我的学习就靠网上查资料,没有买书系统学,自己整理,如果有用了哪位大神的代码 ...
- android 开发小工具收集
http://blog.csdn.net/tikitoo/article/details/51089422
- linux每日命令(34):ps命令和pstree命令
Linux中的ps命令是Process Status的缩写.ps命令用来列出系统中当前运行的那些进程.ps命令列出的是当前那些进程的快照,就是执行ps命令的那个时刻的那些进程,如果想要动态的显示进程信 ...
- 查看SQL SERVER数据库的连接数
1,查看连接到‘TestDB2’数据库的连接 select * from master.dbo.sysprocesses where dbid = DB_ID('TestDB2') *查询某个数据库用 ...
- Sass的安装(windows 10)
1.下载ruby 下载地址:https://rubyinstaller.org/downloads/ 如果觉得下载速度过慢,可以在我的百度去下载: 链接:https://pan.baidu.com/s ...
- Java知多少(2)虚拟机(JVM)以及跨平台原理
相信大家已经了解到Java具有跨平台的特性,可以“一次编译,到处运行”,在Windows下编写的程序,无需任何修改就可以在Linux下运行,这是C和C++很难做到的. 那么,跨平台是怎样实现的呢?这就 ...
- hello alibaba
http://ifeve.com/dubbo-learn-book/ http://ifeve.com/leader-follower-thread-model/ http://ifeve.com/a ...
- Python爬虫学习——布隆过滤器
布隆过滤器的实现方法1:自己实现 参考 http://www.cnblogs.com/naive/p/5815433.html bllomFilter两个参数分别代表,布隆过滤器的大小和hash函数的 ...
- php一句话木马
一句话木马就是只需要一行代码的木马,短短一行代码,就能做到和大马相当的功能. 为了绕过waf的检测,一句话木马出现了无数中变形,但本质是不变的:木马的函数执行了发送的命令. 通过GET .POST . ...