题目大意

流行乐队“Flayer”将在\(n\)个城市开演唱会,这\(n\)个城市的人都想去听演唱会,每个城市的票价不同,于是这些人就想是否能去其他城市听演唱会更便宜,但是去其他的城市也需要路费。

输入格式

第一行包含两个整数\(n\)和\(m\)。

接下来\(m\)行,每行三个数\(u、v、w\)表示\(u\)城市到\(v\)城市要\(w\)元。

接下来\(n\)个数,表示每个城市的票价\(a\)。

输出格式

输出n个数字,表示对应的人到别的城市参加演唱会再返程的最小费用,当然也可以选择在自己的城市参加演唱会

数据范围

\(2≤n≤2·10^5,1≤m≤2·10^5,1≤w_i≤10^{12},1≤a_i≤10^{12}\)

样例

4 2

1 2 4

2 3 7

6 20 1 25

样例输出

6 14 1 25

思路

新建一个点\(P\),向每个城市连一条长度为该城市票价的边。这样从\(P\rightarrow u\rightarrow v\)的距离就表示从\(v\)城市买\(u\)城市的门票要花的最小费用。注意他还要返程的。

代码

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=200000+10;
const int maxm=400000+10;
int n,m;
int nxt[maxm<<1],to[maxm<<1];
ll w[maxn],dis[maxn],vis[maxn],len[maxm << 1]; struct Node{
int u;
ll dis;
bool operator < (const Node &a) const{
return dis>a.dis;
}
};
int head[maxn],cnt;
void add(int a,int b,ll c){
len[cnt]=c;
to[cnt]=b;
nxt[cnt]=head[a];
head[a]=cnt++;
} void Dij(int rt){
int u=rt;
priority_queue<Node> q;
q.push((Node){u,0});
memset(vis,0,sizeof(vis));
for(int i=1;i<=n;i++)
dis[i]=1e13;//注意范围最大可能到1e12 dis[u]=0;
while(!q.empty()){
u=q.top().u;q.pop();
if(vis[u])continue;vis[u]=true;
for(int i=head[u];i!=-1;i=nxt[i]){
int v=to[i];
if(dis[v]>dis[u]+len[i]){
dis[v]=dis[u]+len[i];
q.push((Node){v,dis[v]});
}
}
}
} int main(){
memset(head,-1,sizeof(head));
scanf("%d%d",&n,&m);
for(int i=1;i <= m;i++){
int u,v;ll l;
scanf("%d%d%lld",&u,&v,&l);
add(u,v,l*2);add(v,u,l*2);
} for(int i=1;i<=n;i++){
scanf("%lld",&w[i]);
add(0,i,w[i]);
} Dij(0); for(int i=1;i<=n;i++)
printf("%lld ",dis[i]); return 0;
}

【最短路】CF 938D Buy a Ticket的更多相关文章

  1. CF 938D Buy a Ticket 题解

    题目 Musicians of a popular band "Flayer" have announced that they are going to "make t ...

  2. 最短路 || Codeforces 938D Buy a Ticket

    题意:从城市u到v(双向)要花w钱,每个城市看演唱会要花不同的门票钱,求每个城市的人要看一场演唱会花费最少多少(可以在这个城市看,也可以坐车到别的城市看,然后再坐车回来) 思路:本来以为是多源..实际 ...

  3. Codeforces 938D Buy a Ticket (转化建图 + 最短路)

    题目链接  Buy a Ticket 题意   给定一个无向图.对于每个$i$ $\in$ $[1, n]$, 求$min\left\{2d(i,j) + a_{j}\right\}$ 建立超级源点$ ...

  4. Codeforces 938D Buy a Ticket

    Buy a Ticket 题意要求:求出每个城市看演出的最小费用, 注意的一点就是车票要来回的. 题解:dijkstra 生成优先队列的时候直接将在本地城市看演出的费用放入队列里, 然后直接跑就好了, ...

  5. Codeforces 938D. Buy a Ticket (最短路+建图)

    <题目链接> 题目大意: 有n座城市,每一个城市都有一个听演唱会的价格,这n座城市由m条无向边连接,每天变都有其对应的边权.现在要求出每个城市的人,看一场演唱会的最小价值(总共花费的价值= ...

  6. Codeforces 938D Buy a Ticket 【spfa优化】

    用到了网络流的思想(大概).新建一个源点s,所有边权扩大两倍,然后所有的点向s连边权为点权的无向边,然后以s为起点跑spfa(S什么L优化的),这样每个点到s的距离就是答案. 原因的话,考虑答案应该是 ...

  7. Codeforces 938 D. Buy a Ticket (dijkstra 求多元最短路)

    题目链接:Buy a Ticket 题意: 给出n个点m条边,每个点每条边都有各自的权值,对于每个点i,求一个任意j,使得2×d[i][j] + a[j]最小. 题解: 这题其实就是要我们求任意两点的 ...

  8. Codeforces 938.D Buy a Ticket

    D. Buy a Ticket time limit per test 2 seconds memory limit per test 256 megabytes input standard inp ...

  9. Buy A Ticket(图论)

    Buy A Ticket 题目大意 每个点有一个点权,每个边有一个边权,求对于每个点u的\(min(2*d(u,v)+val[v])\)(v可以等于u) solution 想到了之前的虚点,方便统计终 ...

随机推荐

  1. SSM框架中添加写日志功能

    前提:要导入log4j的jar包 在web.xml中输入: <!--日志加载--> <context-param> <param-name>log4jConfigL ...

  2. springBoot 使用webSocket

    本文(2019年6月18日 飞快的蜗牛博客) 有许多人走着走着,就迷失了自己,所以不论发生了什么,有时候抱着自己去静下来想想,要好好的对待自己:"钱塘江上潮信来,今日方知我是我", ...

  3. 【原创】Kuberneters-HelmV3.3.1入门介绍及实践

    一.为什么需要Helm? Kubernetes目前已成为容器编排的事实标准,随着传统架构向微服务容器化架构的转变,从一个巨大的单体的应用切分为多个微服务,每个微服务可独立部署和扩展,实现了敏捷开发和快 ...

  4. PHP程序十点未来的建议

    1. Composer 第一点就要提 Composer ,自从 Composer 出现后,PHP 的依赖管理可以变得非常简单.程序内依赖一些类库和框架,直接使用 Composer 引入即可,通过使用 ...

  5. zookeeper(3) 持久化

    zookeeper为了防止,系统宕机或重启导致的数据丢失,会对数据进行定时持久化.有两种持久化方式: 1.为每次事务操作记录到日志文件,这样就可以通过执行这些日志文件来恢复数据. 2.为了加快ZooK ...

  6. Java Comparable 和 Comparator 接口详解

    本文基于 JDK8 分析 Comparable Comparable 接口位于 java.lang 包下,Comparable 接口下有一个 compareTo 方法,称为自然比较方法.一个类只要实现 ...

  7. 转载:pycharm IDE 导入自定义模块

    http://www.mamicode.com/info-detail-2241193.html

  8. 2020 CiGA Game Jam活动总结

    CiGA Game Jam 总结 今年8月14.15.16号,48小时游戏开发--Game Jam开始了.蠢新第一次参加Game Jam,今年还是线上开展,情绪复杂= = 还有一个坏消息,晓航旅游缺席 ...

  9. springboot整合Mangodb实现crud,高级查询,分页,排序,简单聚合

    //linux安装mangodb教程:https://www.cnblogs.com/yangxiaohui227/p/11347832.html 1.引入maven 依赖 <dependenc ...

  10. Apache Shiro 1.3.2入门

    简介 Apache Shiro是一个功能强大且灵活的开放源代码安全框架,可以清楚地处理认证,授权,企业会话管理和加密.Apache Shiro的首要目标是易于使用和理解.有时候安全性可能非常复杂和痛苦 ...