Codeforces 938D. Buy a Ticket (最短路+建图)
<题目链接>
题目大意:
有n座城市,每一个城市都有一个听演唱会的价格,这n座城市由m条无向边连接,每天变都有其对应的边权。现在要求出每个城市的人,看一场演唱会的最小价值(总共花费的价值=所看演唱会的价值+该城市的人去那个城市看演唱会的往返距离之和)。
解题分析:
比较好的一道最短路题,主要考察建图能力。我们不妨建立一个虚拟源点,然后该源点向所有的边都连上一条无向边,边权为对应点的点权。然后所有的点之间通过m条边连接,只不过边权设为2倍原边权。最后就是从源点跑一遍最短路,就能得到每个城市的人能够看演唱会的最小价值。这里有点逆向思维的意思,源点向所有点连一条边权为$a[i]$的边,代表该点作为最后看演唱会的城市,所贡献的价值。
#include <bits/stdc++.h>
using namespace std; typedef long long ll;
const int N = 2e5+ ;
const ll INF = 1e18; template<typename T>
inline void read(T&x){
x=;int f=;char c=getchar();
while(c<'' || c>''){ if(c=='-')f=-;c=getchar(); }
while(c>='' && c<=''){ x=x*+c-'';c=getchar(); }
x*=f;
} struct Edge{ int from,to,nxt;ll val; }e[N<<];
int n,m,cnt;
int head[N],vis[N]; struct Node{
int loc;ll dist;
bool operator < (const Node &tmp)const{ return dist>tmp.dist; }
}node[N]; inline void add(int u,int v,ll w){
e[++cnt]=(Edge){u,v,head[u],w};
head[u]=cnt;
}
inline void Dij(int st){
for(int i=;i<=n;i++){
vis[i]=,node[i]=(Node){i,INF};
}
priority_queue<Node>q;
node[].dist=;
q.push(node[]);
while(q.size()){
int u=q.top().loc;q.pop();
if(vis[u])continue;
vis[u]=;
for(int i=head[u];i;i=e[i].nxt){
int v=e[i].to;ll cost=e[i].val;
if(node[v].dist>node[u].dist+cost){
node[v].dist=node[u].dist+cost;
q.push(node[v]);
}
}
}
}
int main(){
read(n);read(m);
for(int i=;i<=m;i++){
int u,v;ll w;
read(u);read(v);read(w);
add(u,v,*w);add(v,u,*w);
}
for(int i=;i<=n;i++){
ll val;read(val);
add(,i,val);add(i,,val);
}
Dij();
for(int i=;i<=n;i++)
i==n?printf("%lld\n",node[i].dist):printf("%lld ",node[i].dist);
}
Codeforces 938D. Buy a Ticket (最短路+建图)的更多相关文章
- Codeforces 938D Buy a Ticket (转化建图 + 最短路)
题目链接 Buy a Ticket 题意 给定一个无向图.对于每个$i$ $\in$ $[1, n]$, 求$min\left\{2d(i,j) + a_{j}\right\}$ 建立超级源点$ ...
- Codeforces 938D Buy a Ticket
Buy a Ticket 题意要求:求出每个城市看演出的最小费用, 注意的一点就是车票要来回的. 题解:dijkstra 生成优先队列的时候直接将在本地城市看演出的费用放入队列里, 然后直接跑就好了, ...
- 最短路 || Codeforces 938D Buy a Ticket
题意:从城市u到v(双向)要花w钱,每个城市看演唱会要花不同的门票钱,求每个城市的人要看一场演唱会花费最少多少(可以在这个城市看,也可以坐车到别的城市看,然后再坐车回来) 思路:本来以为是多源..实际 ...
- Codeforces 938D Buy a Ticket 【spfa优化】
用到了网络流的思想(大概).新建一个源点s,所有边权扩大两倍,然后所有的点向s连边权为点权的无向边,然后以s为起点跑spfa(S什么L优化的),这样每个点到s的距离就是答案. 原因的话,考虑答案应该是 ...
- [Codeforces 1197E]Culture Code(线段树优化建图+DAG上最短路)
[Codeforces 1197E]Culture Code(线段树优化建图+DAG上最短路) 题面 有n个空心物品,每个物品有外部体积\(out_i\)和内部体积\(in_i\),如果\(in_i& ...
- CodeForces 786B Legacy(线段树优化建图+最短路)
[题目链接] http://codeforces.com/problemset/problem/786/B [题目大意] 给出一些星球,现在有一些传送枪,可以从一个星球到另一个星球, 从一个星球到另一 ...
- HDU 5521 [图论][最短路][建图灵感]
/* 思前想后 还是决定坚持写博客吧... 题意: n个点,m个集合.每个集合里边的点是联通的且任意两点之间有一条dis[i]的边(每个集合一个dis[i]) 求同时从第1个点和第n个点出发的两个人相 ...
- hdu4725 The Shortest Path in Nya Graph【最短路+建图】
转载请注明出处,谢谢:http://www.cnblogs.com/KirisameMarisa/p/4297574.html ---by 墨染之樱花 题目链接:http://acm.hdu ...
- HDU5521-最短路-建图
Meeting Time Limit: 12000/6000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)Total ...
随机推荐
- Java IO系列之二:NIO基本操作
核心部分 NIO( New Input/ Output) , 引入了一种基于通道和缓冲区的 I/O 方式,NIO 是一种同步非阻塞的 IO 模型.同步是指线程不断轮询 IO 事件是否就绪,非阻塞是指 ...
- JN_0007:微信昵称设置小数字
请复制下面背景色里面的数字符号 上标: ℡º ¹ ² ³ ⁴ ⁵ ⁶ ⁷ ⁸ ⁹ ⁺ ⁻ ⁼ ⁽ ⁾ ⁿ ′ ½ 下标: ℡.₀ ₁ ₂ ₃ ₄ ₅ ₆ ₇ ₈ ₉ ₊ ₋ ₌ ₍ ₎ 复制上面那串数 ...
- Android防止手动添加的本地库文件被NDK工具清理掉
比如要添加一个名为libocr的本地库,先将libocr.so文件拷贝到jni目录下,然后在Android.mk文件中添加以下语句即可. 例: LOCAL_PATH := $(call my-dir) ...
- R猜拳游戏解释
R猜拳游戏解释 作者:梁 蓉 猜拳游戏大概解释: 搜集齐数据框,for循环在三个随机数里抽俩个,抽出的数据放回,继续抽取剪刀石头布,机器人出剪刀石头布,我出对应压制机器人的方法来赢取胜利,我给机器人发 ...
- 记一场与 cookie 的相遇
简介: cookie 翻译过来为 “小甜点,一种酥性甜饼干,很美味的...”,咳咳,打住!我们这里说的是 “甜点” 文件,它是浏览器储存在用户电脑上的一小段纯文本格式的文件. 由于 http 是一种无 ...
- neo4j语法
图数据库在社交网络.实时推荐.征信系统.人工智能等领域有广泛应用. 集群特征:主从复制,重选主服务器和容错:每个实例都有自己的本地缓冲 性能优势:查询内不跨网络:实时操作,具有快速和一致的响应时间:缓 ...
- vue-router组件重用 路由切换时的问题
当一个组件被重用时,切换路由,该组件不会被销毁.该组件的created也不会被调用,如果在created中有获取数据的操作,切换路由后,就不会再获取新的数据了,界面上就没有刷新. 其实官方文档就有解决 ...
- hibernate原生sql获取list<T>异常解决
/** * <p>Title: getbigestMinIntegral</p> * <p>Description: 获取最大的MinIntegral(原则上即最高 ...
- python&JSONP(初级篇)
JSONP产生背景 1.跨域的安全限制都是对浏览器端来说的,服务器端是不存在跨域安全限制的. 2.浏览器的同源策略限制从一个源加载的文档或脚本与来自另一个源的资源进行交互. 3.如果协议,端口和主机对 ...
- Vue中ajax返回的结果赋值
这是第二次在项目中遇到此问题,ajax请求成功后在success函数中为Vue实例data里的变量赋值,却失败了 new Vue({ el:'#app', data:{ msg:'' }, creat ...