题目链接

http://codeforces.com/gym/101630/attachments

题解

zyb学长的题。

先枚举第\(k\)大的边权,设其边权为\(x\),然后把每条边边权减掉\(x\)与\(0\)取\(\max\), 跑最短路之后加上\(x\times k\)更新答案。

注意从\(0\)开始枚举(就相当于裸跑最短路)。

代码

#include<cstdio>
#include<cstdlib>
#include<iostream>
#include<cassert>
#include<algorithm>
#include<queue>
#include<cstring>
#define llong long long
using namespace std; const int N = 3000;
const int M = 6000;
struct Edge
{
int v,nxt; llong w;
} e[M+3];
int fe[N+3];
struct AEdge
{
int u,v; llong w;
} ae[M+3];
struct DijNode
{
int u; llong dis;
DijNode() {}
DijNode(int _u,llong _dis) {u = _u,dis = _dis;}
bool operator <(const DijNode &arg) const {return dis>arg.dis;}
};
priority_queue<DijNode> pq;
llong dis[N+3];
bool vis[N+3];
int n,en,p,s,t,m; void addedge(int u,int v,llong w)
{
en++; e[en].v = v; e[en].w = w;
e[en].nxt = fe[u]; fe[u] = en;
} void clear()
{
for(int i=1; i<=m; i++) e[i].v = e[i].nxt = e[i].w = 0;
for(int i=1; i<=n; i++) fe[i] = 0;
en = 0;
} llong Dijkstra()
{
memset(dis,42,sizeof(dis)); memset(vis,false,sizeof(vis));
dis[s] = 0ll; pq.push(DijNode(s,0));
while(!pq.empty())
{
DijNode tmp = pq.top(); pq.pop(); int u = tmp.u;
if(tmp.dis!=dis[u]) continue;
if(vis[u]==true) continue;
vis[u] = true;
for(int i=fe[u]; i; i=e[i].nxt)
{
int v = e[i].v;
if(dis[v]>dis[u]+e[i].w && vis[v]==false)
{
dis[v] = dis[u]+e[i].w;
pq.push(DijNode(v,dis[v]));
}
}
}
return dis[t];
} int main()
{
scanf("%d%d%d",&n,&m,&p); s = 1; t = n;
for(int i=1; i<=m; i++)
{
scanf("%d%d%I64d",&ae[i].u,&ae[i].v,&ae[i].w);
}
llong ans = 10000000000000000ll;
for(int i=0; i<=m; i++)
{
for(int j=1; j<=m; j++) addedge(ae[j].u,ae[j].v,max(ae[j].w-ae[i].w,0ll)),addedge(ae[j].v,ae[j].u,max(ae[j].w-ae[i].w,0ll));
llong cur = Dijkstra();
ans = min(ans,cur+ae[i].w*p);
clear();
}
printf("%I64d\n",ans);
return 0;
}

Codeforces Gym 101630J Travelling from Petersburg to Moscow (最短路)的更多相关文章

  1. Gym:101630J - Journey from Petersburg to Moscow(最短路)

    题意:求1到N的最短路,最短路的定义为路径上最大的K条边. 思路:对于每种边权,假设为X,它是第K大,那么小于X的变为0,大于K的,边权-X.然后求最短路,用dis[N]+K*X更新答案. 而小于K的 ...

  2. Codeforces Gym 101252D&&floyd判圈算法学习笔记

    一句话题意:x0=1,xi+1=(Axi+xi%B)%C,如果x序列中存在最早的两个相同的元素,输出第二次出现的位置,若在2e7内无解则输出-1. 题解:都不到100天就AFO了才来学这floyd判圈 ...

  3. Codeforces Gym 101190M Mole Tunnels - 费用流

    题目传送门 传送门 题目大意 $m$只鼹鼠有$n$个巢穴,$n - 1$条长度为$1$的通道将它们连通且第$i(i > 1)$个巢穴与第$\left\lfloor \frac{i}{2}\rig ...

  4. Codeforces Gym 101623A - 动态规划

    题目传送门 传送门 题目大意 给定一个长度为$n$的序列,要求划分成最少的段数,然后将这些段排序使得新序列单调不减. 考虑将相邻的相等的数缩成一个数. 假设没有分成了$n$段,考虑最少能够减少多少划分 ...

  5. 【Codeforces Gym 100725K】Key Insertion

    Codeforces Gym 100725K 题意:给定一个初始全0的序列,然后给\(n\)个查询,每一次调用\(Insert(L_i,i)\),其中\(Insert(L,K)\)表示在第L位插入K, ...

  6. Codeforces gym 101343 J.Husam and the Broken Present 2【状压dp】

     2017 JUST Programming Contest 2.0 题目链接:Codeforces gym 101343 J.Husam and the Broken Present 2 J. Hu ...

  7. codeforces gym 100553I

    codeforces gym 100553I solution 令a[i]表示位置i的船的编号 研究可以发现,应是从中间开始,往两边跳.... 于是就是一个点往两边的最长下降子序列之和减一 魔改树状数 ...

  8. CodeForces Gym 100213F Counterfeit Money

    CodeForces Gym题目页面传送门 有\(1\)个\(n1\times m1\)的字符矩阵\(a\)和\(1\)个\(n2\times m2\)的字符矩阵\(b\),求\(a,b\)的最大公共 ...

  9. Codeforces Round #626 (Div. 2, based on Moscow Open Olympiad in Informatics)

    A. Even Subset Sum Problem 题意 给出一串数,找到其中的一些数使得他们的和为偶数 题解 水题,找到一个偶数或者两个奇数就好了 代码 #include<iostream& ...

随机推荐

  1. 发明专利定稿&递交申请啦,开心

    也不想写些什么,只是想简单的分享一下当前的心情! 第一版到最后一版中间因为各种事情耽误,一直弄到现在.5月中旬找的专利代理局中间连续修改很多次,从大改到小改,再到微调真的是学习到了! 下面就是搞定&l ...

  2. EntityFramework学习要点记一

    一.Entity的注解属性(Annotations)不管是code first还是db first,都需要用到注解属性,至于用System.ComponentModel.DataAnnotations ...

  3. layer的两种提示信息

    layer.msg('您的航班价格已变动,请返回重新选择航班!', { time: 10000, shade : [0.6 , '#000' , true], btn: ['返回列表', '关闭'], ...

  4. VLC播放各种源

    RTSP    rtsp://admin:Shws1610@192.168.1.33:554/channel/01 UDP 播放推导本机上的udp流 : udp://@:1234 播放其他机器上的ud ...

  5. java实现spark常用算子之Repartitions

    import org.apache.spark.SparkConf;import org.apache.spark.api.java.JavaRDD;import org.apache.spark.a ...

  6. JS和JS是IE上JavaScript或JScript的缩写。

    JS和JS是IE上JavaScript或JScript的缩写.javascript是所有浏览器的开放式标准脚本语言JScript是微软自己的开放式脚本语言标准,只有微软的IE浏览器遵循.JScript ...

  7. java enum类自定义属性

    enum类自定义属性 这就是enum比static静态变量好用的地方了,可以赋予每一个枚举值若干个属性,例如 实例1: public enum GasStationChannel { ZH(" ...

  8. Nginx如何配置防盗链

    配置要点 none : 允许没有http_refer的请求访问资源: blocked : 允许不是http://开头的,不带协议的请求访问资源: 119.28.190.215 start.igrow. ...

  9. shell脚本获取传递的参数

    1 脚本编写 #!/bin/bash 2 解释 $n 表示是第几个参数 $0 表示脚本命令本身 3 执行效果

  10. 第五章·Logstash深入-日志收集

    1.Logstash收集单个日志到文件中 file模块收集日志 不难理解,我们的日志通常都是在日志文件中存储的,所以,当我们在使用INPUT插件时,收集日志,需要使用file模块,从文件中读取日志的内 ...