D. Buy a Ticket
time limit per test

2 seconds

memory limit per test

256 megabytes

input

standard input

output

standard output

Musicians of a popular band "Flayer" have announced that they are going to "make their exit" with a world tour. Of course, they will visit Berland as well.

There are n cities in Berland. People can travel between cities using two-directional train routes; there are exactly m routes, i-th route can be used to go from city vi to city ui (and from ui to vi), and it costs wi coins to use this route.

Each city will be visited by "Flayer", and the cost of the concert ticket in i-th city is ai coins.

You have friends in every city of Berland, and they, knowing about your programming skills, asked you to calculate the minimum possible number of coins they have to pay to visit the concert. For every city i you have to compute the minimum number of coins a person from city i has to spend to travel to some city j (or possibly stay in city i), attend a concert there, and return to city i (if j ≠ i).

Formally, for every  you have to calculate , where d(i, j) is the minimum number of coins you have to spend to travel from city i to city j. If there is no way to reach city j from city i, then we consider d(i, j) to be infinitely large.

Input

The first line contains two integers n and m (2 ≤ n ≤ 2·105, 1 ≤ m ≤ 2·105).

Then m lines follow, i-th contains three integers viui and wi (1 ≤ vi, ui ≤ n, vi ≠ ui, 1 ≤ wi ≤ 1012) denoting i-th train route. There are no multiple train routes connecting the same pair of cities, that is, for each (v, u) neither extra (v, u) nor (u, v) present in input.

The next line contains n integers a1, a2, ... ak (1 ≤ ai ≤ 1012) — price to attend the concert in i-th city.

Output

Print n integers. i-th of them must be equal to the minimum number of coins a person from city i has to spend to travel to some city j (or possibly stay in city i), attend a concert there, and return to city i (if j ≠ i).

Examples
input

Copy
4 2
1 2 4
2 3 7
6 20 1 25
output
6 14 1 25 
input

Copy
3 3
1 2 1
2 3 1
1 3 1
30 10 20
output
12 10 12 
题目大意:每个点有点权a[i],定义d[i][j]为i到j的最短路.对于每一个i,求一个任意的j,使得2*d[i][j] + a[j]最小.
分析:这道题应该属于那种想一会就能想到的题.
   题目让我们求的实际上是多源最短路.怎么求?floyd? 其实可以dijkstra来求.现将所有的点以及点权放到结构体里,并且加入到优先队列中.每扩展到一个点,这个点的答案就被确定了,因为是优先队列,每次都会找路径长度最小的扩展.然后再把这个点能扩展到的点以及路径长度放到优先队列中,不断处理,直到所有点的答案被确定.
这道题利用了dijkstra每次取最短距离的点更新和可以处理多源最短路的特点,以前做过的一道类似的题:hdu6166
#include <cstdio>
#include <queue>
#include <cstring>
#include <iostream>
#include <algorithm> using namespace std; typedef long long ll;
const ll maxn = ;
ll n,m,head[maxn],to[maxn * ],nextt[maxn * ],w[maxn * ],tot = ,vis[maxn],ans[maxn];
priority_queue <pair<ll,ll>,vector<pair<ll,ll> >,greater<pair<ll,ll> > > q; void add(ll x,ll y,ll z)
{
w[tot] = z;
to[tot] = y;
nextt[tot] = head[x];
head[x] = tot++;
} int main()
{
scanf("%I64d%I64d",&n,&m);
for (ll i = ; i <= m; i++)
{
ll a,b,c;
scanf("%I64d%I64d%I64d",&a,&b,&c);
add(a,b,*c);
add(b,a,*c);
}
for (ll i = ; i <= n; i++)
{
ll t;
scanf("%I64d",&t);
q.push(make_pair(t,i));
}
while (!q.empty())
{
pair <ll,ll> u = q.top();
q.pop();
if (vis[u.second])
continue;
vis[u.second] = ;
ans[u.second] = u.first;
for (ll i = head[u.second];i;i = nextt[i])
{
ll v = to[i];
q.push(make_pair(u.first + w[i],v));
}
}
for (ll i = ; i <= n; i++)
printf("%I64d ",ans[i]); return ;
}

Codeforces 938.D Buy a Ticket的更多相关文章

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

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

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

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

  3. Codeforces 938D Buy a Ticket

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

  4. Buy the Ticket{HDU1133}

    Buy the TicketTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total ...

  5. 【HDU 1133】 Buy the Ticket (卡特兰数)

    Buy the Ticket Problem Description The "Harry Potter and the Goblet of Fire" will be on sh ...

  6. 【高精度练习+卡特兰数】【Uva1133】Buy the Ticket

    Buy the Ticket Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) T ...

  7. Buy the Ticket(卡特兰数+递推高精度)

    Buy the Ticket Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Tota ...

  8. hdu 1133 Buy the Ticket(Catalan)

    Buy the Ticket Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) T ...

  9. HDUOJ---1133(卡特兰数扩展)Buy the Ticket

    Buy the Ticket Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)To ...

随机推荐

  1. Spring学习(2):面向接口编程思想

    一. 引言 Spring核心的IOC的实体用了面向接口编程思想,所以有必要了解下.简单来说的话,Spring就是一个轻量级的控制反转(IOC)和面向切面(AOP)的容器框架. 接口的定义的概念:泛指实 ...

  2. org.apache.poi版本问题

    问题描述: 今天跑一段历史代码,发现不能启动,抛出java.lang.NoSuchFieldError: RETURN_NULL_AND_BLANK 问题 解决办法: 把org.apache.poi的 ...

  3. 【Python入门总结】

    用了两周时间将python的基本语法和模块过了一遍,alex的视频也简单看了下;并且在项目中直接上了python解析语义的实现,初步感觉到了python语言的魅力.下一步,会按照廖雪峰的python学 ...

  4. Variable() placeholder() constant() 的区别

    转载来自: http://www.studyai.com/article/33e22cef42274e8a

  5. js 插件 issue

    1 iscroll 5 和 lazyload 同时使用  转自 yinjie //lazyload var $scrollEle = $("#wrapper") $("i ...

  6. 进阶系列(8)——匿名方法与lambda表达式

    一 匿名方法的介绍     匿名方法是为了简化委托的实现,方便调用委托方法而出现的,同时,匿名方法也是学好lambda表达式的基础.在委托调用的方法中,如果方法只被调用一次,这个时候我们就没有必要创建 ...

  7. mysql---增删用户

    Mysql创建.删除用户 MySql中添加用户,新建数据库,用户授权,删除用户,修改密码(注意每行后边都跟个  ;  表示一个命令语句结束): 1.新建用户 登录MYSQL: @>mysql - ...

  8. 《剑指offer》---左旋转字符串与右旋转字符串

    本文算法使用python3实现 1. 问题1 1.1 题目描述:   汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果.对于一个给定的字符序列S, ...

  9. 201621123037 《Java程序设计》第9周学习总结

    作业09-集合与泛型z 1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结集合与泛型相关内容. 这次改一个方式,就不用思维导图了,用图文结合方式来总结 1. Map三视图 键值: S ...

  10. 【leetcode】62.63 Unique Paths

    62. Unique Paths A robot is located at the top-left corner of a m x n grid (marked 'Start' in the di ...