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)$的.感觉写着有点困难,自己写了一 ...
随机推荐
- Mocks Aren't Stubs
Mocks Aren't Stubs The term 'Mock Objects' has become a popular one to describe special case objects ...
- Backbone hello world
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <meta http ...
- IP子系统集成
IP子系统集成 1.Creating External Connections 由此可以看出:block design的设计是可以连接电路板上的CPU的(外挂CPU). 2.生成外部接口 端口生成之后 ...
- flash初步尝试
1.pip install flask 验证 from flask import Flask 2.pip install sqlalchemy 3. pip install flask-sqlal ...
- 浅谈 OpenResty
一.前言 我们都知道Nginx有很多的特性和好处,但是在Nginx上开发成了一个难题,Nginx模块需要用C开发,而且必须符合一系列复杂的规则,最重要的用C开发模块必须要熟悉Nginx的源代码,使得开 ...
- 【Netty】通俗地讲,Netty 能做什么?
作者:郭无心链接:https://www.zhihu.com/question/24322387/answer/78947405来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明 ...
- sublime text 3浅色主题
{ // Lighter theme "theme": "Material-Theme-Lighter.sublime-theme", "color_ ...
- 【Unity】讯飞语音识别SDK
1.进入讯飞官网,注册帐号,进入控制台,创建新应用UnityXunfeiDemo,平台选Android.在当前应用这点下载SDK,添加AI能力(添加新服务),选择语音听写,即可下载安卓SDK(下称讯飞 ...
- WebRTC信令控制简介与STUN, TURN服务器搭建
本文将向大家介绍两个方面的知识: WebRTC信令控制 STUN/TURN服务器的搭建 在前面的文章中已经向大家介绍了如何构建信令服务器.但构建的信令服务器是如何工作的?哪些消息需要信令服务器控制和中 ...
- windows下更换pip源
(1)在windows文件管理器中,输入 %APPDATA% (2)会定位到一个新的目录下,在该目录下新建pip文件夹,然后到pip文件夹里面去新建个pip.ini文件 (3)在新建的pip.ini文 ...