problem

给定一张图 nnn 个点 mmm 条边,并给定阈值 kkk,以及起终点 s,ts,ts,t。

然后每条边经过都需要支付 www 的花费,形如 (u,v,w)(u,v,w)(u,v,w) 格式给出。

求 s→ts\rightarrow ts→t 的最小花费。

最小花费定义如下:

  • 如果该路径经过的边数 ≤k\le k≤k,则就是该路径的边权和。
  • 如果该路径经过的边数 >k>k>k,则只需要求前 kkk 大的边权和。

n,k≤1000,m≤2000,1≤wi≤1e9n,k\le 1000,m\le 2000,1\le w_i\le 1e9n,k≤1000,m≤2000,1≤wi​≤1e9。

原题:CF Gym 101630 J

solution

考试设计的部分分实际上能让纯暴力搜路径做法拿到 70 的高分?!!(○´・д・)ノ

我们直接枚举第 kkk 大的边权 xxx,然后把所有边权全都减去 xxx,当然需要和 000 比 max\text{max}max。

然后求 s→ts\rightarrow ts→t 的最短路 +x∗k+x*k+x∗k 就是最短路的真正花费,再全局取最小值即可。

这样子做,我们可以求出所有第 kkk 大边权是 xxx 的所有路径。

如果这条路径不足 kkk,那么你让 kkk 大边权为 000 就行了。

接下来我们要证明此时所有第 kkk 大边权 ≠x\neq x​=x 的路径花费都不存在算得比真实花费小的情况。

只要不影响到最终答案即可。

证明其实很简单。可能不太严谨??

  • 第 kkk 大边权 <x<x<x。

    那么前 kkk 大至少有一个减掉后边权成为 000,后面用 k∗xk*xk∗x 抵消这个减去的边权时,相当于多弥补了一些花费。

  • 第 kkk 大边权 >x>x>x。

    那么除去前 kkk 大,后面的某些边权可能也会 >x>x>x,减去后还是存在花费会被统计进路径中。

    而实际上后面这些边权都是不用算的。

那么这道题就变成了 O(n2log⁡n)O(n^2\log n)O(n2logn) 了。

code

#include <bits/stdc++.h>
using namespace std;
#define maxn 1005
#define int long long
#define Pair pair < int, int >
int n, m, k, s, t;
struct edge{ int u, v, w; }E[maxn << 1];
priority_queue < Pair, vector < Pair >, greater < Pair > >q;
int dis[maxn];
vector < pair < int, int > > G[maxn];int dijkstra() {memset( dis, 0x3f, sizeof( dis ) );q.push( make_pair( dis[s] = 0, s ) );while( ! q.empty() ) {int u = q.top().second; int w = q.top().first; q.pop();if( dis[u] ^ w ) continue;for( int i = 0;i < G[u].size();i ++ ) {int v = G[u][i].first; w = G[u][i].second;if( dis[v] > dis[u] + w ) q.push( make_pair( dis[v] = dis[u] + w, v ) );}}return dis[t];
}int solve( int x ) {for( int i = 1;i <= n;i ++ ) G[i].clear();for( int i = 1;i <= m;i ++ ) G[E[i].u].push_back( make_pair( E[i].v, max( 0ll, E[i].w - x ) ) );   return dijkstra() + x * k;
}signed main() {scanf( "%lld %lld %lld %lld %lld", &n, &m, &k, &s, &t );for( int i = 1;i <= m;i ++ ) scanf( "%lld %lld %lld", &E[i].u, &E[i].v, &E[i].w );int ans = solve( 0 );for( int i = 1;i <= m;i ++ ) ans = min( ans, solve( E[i].w ) );printf( "%lld\n", ans );return 0;
}

[CodeForces gym 101630 J] 过路费(最短路)相关推荐

  1. Codeforces Gym 101630J Travelling from Petersburg to Moscow (最短路)

    题目链接 http://codeforces.com/gym/101630/attachments 题解 zyb学长的题. 先枚举第\(k\)大的边权,设其边权为\(x\),然后把每条边边权减掉\(x ...

  2. Codeforces Gym 101630J Journey from Petersburg to Moscow (最短路)

    题目链接 http://codeforces.com/gym/101630/attachments 题解 zyb学长的题. 先枚举第\(k\)大的边权,设其边权为\(x\),然后把每条边边权减掉\(x ...

  3. Codeforces Gym 101173 CERC 16 D BZOJ 4790 Dancing Disks

    Codeforces Gym 101173 CERC 16 D & BZOJ 4790 Dancing Disks 强烈安利这道构造题目,非常有意思. 这里用到的思想是归并排序! 多路归并排序 ...

  4. Codeforces Gym 101086 M ACPC Headquarters : AASTMT (Stairway to Heaven)

    Codeforces Gym 101086 M ACPC Headquarters : AASTMT (Stairway to Heaven) 题目来源: Codeforces 题意: 给出一些比赛, ...

  5. [Codeforces Gym 101651/100725B] Banal Tickets

    Codeforces Gym 100725 题解: 先分两种情况, 积为000与积非0" role="presentation" style="position ...

  6. 【最短路】NEERC15 F Froggy Ford(2015-2016 ACM-ICPC)(Codeforces GYM 100851)

    题目链接: http://codeforces.com/gym/100851 题目大意: 一只青蛙跳过宽为W的河,河中游N个石头,坐标xi,yi,现在往河中间添加一个石头,使得每次跳跃的最大的距离最小 ...

  7. 【最短路】NEERC15 F Froggy Ford (Codeforces GYM 100851)

    题目链接: http://codeforces.com/gym/100851 题目大意: 一只青蛙跳过宽为W的河,河中游N个石头,坐标xi,yi,现在往河中间添加一个石头,使得每次跳跃的最大的距离最小 ...

  8. Codeforces Gym 100342J Problem J. Triatrip 求三元环的数量 bitset

    Problem J. Triatrip Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100342/at ...

  9. Codeforces Gym 100269 Dwarf Tower (最短路)

    题目连接: http://codeforces.com/gym/100269/attachments Description Little Vasya is playing a new game na ...

最新文章

  1. IoT机会窗打开:运营商亟需战略转型 获取物联网最大化价值
  2. mysql 批处理文件传参_如何实现批处理文件传参数给SQLPLUS
  3. java中表示根号三_Java命名规范
  4. 怎样把php文件改成固定大小,php修改上传文件大小限制的方法
  5. 软件安全测试报告模板_软件测试工程师经典面试题
  6. CSS 小结笔记之文字溢出处理
  7. 数据采集标注、模型开发、部署落地,百度大脑全栈 AI 能力详解
  8. MySQL中事务控制语句_Mysql事务控制语言
  9. 攻防世界misc新手_攻防世界pwn新手练习(CGfsb)
  10. String变量作为参数传递的是String变量的副本
  11. margin和padding的四种写法
  12. Python 学习之旅1
  13. 关于这个blog使用的问题?
  14. /etc/shadow文件介绍
  15. 史玉柱给创业者的五条建议
  16. 常用中文字体的英文名称
  17. 尤雨溪:Vue Function-based API RFC
  18. 学习PerfDog安卓(Android)APP的性能测试(1)
  19. 离线数仓建设及技术选型
  20. 微信小程序——剪贴板 的使用

热门文章

  1. 推荐系统相关算法(2):k-nearest neighbor
  2. curd什么意思中文_每日一句英译英:She's a ten什么意思?
  3. centos7python命令_02.将python3作为centos7的默认python命令
  4. php sorcket_PHP: Sockets - Manual
  5. spring boot 缓存_Spring Boot 集成 Redis 实现数据缓存
  6. 7-37 模拟EXCEL排序 (25 分)(思路+详解+超时解决 兄弟们冲呀呀呀呀呀呀)
  7. JAVA开发需求分析套路_毕设做什么好?感觉都是套路了
  8. 十一届蓝桥杯国赛 玩具蛇-dfs
  9. AcWing 3208. Z字形扫描
  10. Jin Ge Jin Qu hao UVA - 12563 (劲歌金曲)01背包,求装入的东西最多(相同多时价值大)