Buy a Ticket CodeForces - 938D (dijkstra) 大意: n节点无向图, 点ii到点jj的花费为2dis(i,j)+a[j]2dis(i,j)+a[j], 对于每个点, 求最少花费. 每条边权翻倍, 源点S向所有点ii连边, 权为a[i]a[i], 答案就为SS到每个点的最短路距离....
Buy a Ticket 题意要求:求出每个城市看演出的最小费用, 注意的一点就是车票要来回的。 题解:dijkstra 生成优先队列的时候直接将在本地城市看演出的费用放入队列里, 然后直接跑就好了, dis数组存的是, 当前情况下的最小花费是多少。 代码: 1#include<iostream>2#include<cstring>3#include<string>4#include<qu...
我们不妨建立一个虚拟源点,然后该源点向所有的边都连上一条无向边,边权为对应点的点权。然后所有的点之间通过m条边连接,只不过边权设为2倍原边权。最后就是从源点跑一遍最短路,就能得到每个城市的人能够看演唱会的最小价值。这里有点逆向思维的意思,源点向所有点连一条边权为$a[i]$的边,代表该点作为最...
Codeforces 938D Buy a Ticket 【spfa优化】 用到了网络流的思想(大概)。新建一个源点s,所有边权扩大两倍,然后所有的点向s连边权为点权的无向边,然后以s为起点跑spfa(S什么L优化的),这样每个点到s的距离就是答案。 原因的话,考虑答案应该是min(2*dis[i][j]+a[j]} ),那么每个点到s的距离就是若干...
CodeForces - 938D Buy a Ticket 传送门:CodeForces - 938D 题意:n个城市,m条路,每条路都有自己的花费,每个城市看演唱会也有自己的花费,问从每一个城市到另一个城市(或就在自己城市)看演唱会的最小花费 题解:迪杰斯特拉,跑多源(每个源有权值)最短路。和一般的跑法不一样,要先给每个dis[]赋值成源的权值...
LL d; }l[SZ];voidbuild(intf,intt,LL d) { l[++ tot] =(edge){t,d}; nxt[tot]=head[f]; head[f]=tot; }structnode {intu; LL d; };boolvis[SZ]; LL dist[SZ]; priority_queue<node>q;booloperator< (node a, node b) {returna.d >b.d; }intmain() ...
CF938D Buy a Ticket(最短路) 建立超级原点,将边权设为票价,其他普通边权*2 做一遍最短路即可 #include<bits/stdc++.h>#definegetsz(p) (p?p->sz:0)usingnamespacestd; typedeflonglongll; typedef pair<ll,int>pll;constintmod=1e9+7;constintN=1e6+10;inth[N],ne[N],e[N];...
Buy the Ticket HDU - 1133 大数dp,题意:演唱会门票售票处,那里最开始没有零钱。每一张门票是50元,人们只会拿着100元和50元去买票,有n个人是拿着50元买票,m个人拿着100元去买票。n+m个人按照某个顺序按序买票,如果一个人拿着100元买票,而你没有零钱去找给他,那么
题目链接:Buy a Ticket 题意: 给出n个点m条边,每个点每条边都有各自的权值,对于每个点i,求一个任意j,使得2×d[i][j] + a[j]最小。 题解: 这题其实就是要我们求任意两点的最短路,但是从点的个数上就知道这题不可以用floyd算法,其实多元最短路可以用dijkst
asked you to calculate the minimum possible number of coins they have to pay to visit the concert. For every cityiyou have to compute the minimum number of coins a person from cityihas to spend to travel to some cityj(or possibly stay in cityi), attend a concert there, and return to...