Description

给出一个n个点m条边的带边权无向图
定义1到n的K最短路为所有1到n的路径中,路径上的边权前K大和的最小值。

求K=1~n的最短路。
n,m<=3000,边权<=10^9

Solution

首先我们考虑枚举第K大的边,将小于这条边的所有边记为0(相等的话强行给一个顺序)
考虑一个朴素的DPf[i][j][0/1]f[i][j][0/1]f[i][j][0/1],表示当前到i号点,经过了j条大于枚举这条边的边,是否经过这条边。

直接分层图转移即可。

事实上我们完全不需要记第二维
枚举第K大的边e(可以是0),然后将所有边权赋为max(v−ve,0)max(v-v_e,0)max(v−ve​,0)

直接跑一遍最短路,用最后的距离加上ve∗Kv_e*Kve​∗K更新所有的答案。
正确性显然,因为原本的答案不会变,而不合法的部分只会更劣。

采用dijkstra,就在O(m2log⁡m)O(m^2\log m)O(m2logm)的时间复杂度解决。

Code

#include <bits/stdc++.h>
#define fo(i,a,b) for(int i=a;i<=b;++i)
#define fod(i,a,b) for(int i=a;i>=b;--i)
const int N=3005;
typedef long long LL;
using namespace std;
int n,m,fs[N],nt[2*N],dt[2*N],pr[2*N],m1,lim;
void link(int x,int y,int z)
{nt[++m1]=fs[x];dt[fs[x]=m1]=y;pr[m1]=z;
}
LL ans[N],dis[N];
bool bz[N];
struct node
{int x;LL v;friend bool operator <(node x,node y){return x.v>y.v;}
};
priority_queue<node> h;
int main()
{cin>>n>>m;memset(ans,107,sizeof(ans));fo(i,1,m) {int x,y,z;scanf("%d%d%d",&x,&y,&z);link(x,y,z),link(y,x,z);}fo(q,1,m+1){lim=(q==m+1)?0:pr[2*q];memset(dis,107,sizeof(dis));memset(bz,0,sizeof(bz));dis[1]=0;while(!h.empty()) h.pop();h.push((node){1,0});fo(t,1,n-1){while(bz[(h.top()).x]) h.pop();int k=(h.top()).x;bz[k]=1,h.pop();for(int i=fs[k];i;i=nt[i]){int p=dt[i];LL c=dis[k]+max(0,pr[i]-lim);if(dis[p]>c) dis[p]=c,h.push((node){p,c});}}fo(i,1,n) ans[i]=min(ans[i],(LL)i*lim+dis[n]);}fod(i,n,1) printf("%lld\n",ans[i]);
}

[JZOJ5551] 【NOI2019模拟6.24】旅途【最短路】相关推荐

  1. 【NOI2019模拟2019.7.4】朝夕相处 (动态规划+BM)

    Description: 题解: 这种东西肯定是burnside引理: \(\sum置换后不动点数 \over |置换数|\) 一般来说,是枚举置换\(i\),则\(对所有x,满足a[x+i]=a[i ...

  2. 【2011.10.29模拟】24点游戏题解

    题目描述 24点游戏是一个非常有意思的游戏,很流行,玩法很简单:给你4张牌,每张牌上有数字(其中A代表1,J代表11,Q代表12,K代表13),你可以利用数学中的加.减.乘.除以及括号想办法得到24, ...

  3. 51nod 1326 遥远的旅途 最短路建模

    题意 给出一个无向图,问从1到n是否存在一条长度为L的路径. n,m<=50,1<=路径长度<=10000,L<=10^18 分析 考虑枚举起点的每一条出边,设其权值为w,那么 ...

  4. JZOJ5686. 【GDOI2018Day1模拟4.24】狮鹫旅行

    Description 狮鹫是联盟的主要交通工具,在艾泽拉斯的土地上散布着n个狮鹫站点,有m条有向的飞行线路,也就是构成了一张n个点m条边的有向图. 这m条线路被分成了c种等级,对于其中的第i种等级, ...

  5. 5334. 【NOIP2017提高A组模拟8.24】空

    Description Input Output Sample Input 3 10 100 1 50 50 100 Sample Output 99 Data Constraint Solution ...

  6. JZOJ 3804. 【NOIP2014模拟8.24】小X 的AK 计划

    Description 在小X 的家乡,有机房一条街,街上有很多机房.每个机房里都有一万个人在切题.小X 刚刷完CodeChef,准备出来逛逛. 机房一条街有n 个机房,第i 个机房的坐标为xi,小X ...

  7. JZOJ 3806. 【NOIP2014模拟8.24】小X 的道路修建

    Description 因为一场不小的地震,Y 省n 个城市之间的道路都损坏掉了,省长希望小X 将城市之间的道路重修一遍. 很多城市之间的地基都被地震破坏导致不能修路了,因此可供修建的道路只有m 条. ...

  8. JZOJ 4933. 【NOIP2017提高组模拟12.24】C

    Description Input Sample Input 10 9 3580 8597 508 9110 9162 9973 6017 1942 989 646 1 3 4 405 4 3 5 5 ...

  9. JZOJ 4932. 【NOIP2017提高组模拟12.24】B

    Description 现在你有 NN 个数,分别为 A1,A2,-,ANA1,A2,-,AN ,现在有M组询问需要你回答.每个询问将会给你一个L和R(L<=R)(L,保证 MaxAi−MinA ...

  10. jzoj4800-[GDOI2017模拟9.24]周末晚会【dp,循环重构】

    正题 题目大意 nnn个人的圆桌,可以放男可以放女,然后要求不能有连续kkk个女生坐在一起.求方案总数. 解题思路 先不考虑圆桌,设fi,jf_{i,j}fi,j​表示放了i个人,最前面有连续jjj个 ...

最新文章

  1. 码农技术炒股之路——任务管理器
  2. MySQL 配置数据库编码
  3. java编程50实例_java编程实例大全及详解谜底(50例).doc
  4. python基础4(来自廖雪峰的官方网站)
  5. 华为鸿蒙电脑操作系统测试版,官方公布教程:鸿蒙OS测试版返回EMUI 11
  6. Linux下简单线程池的实现
  7. java word文档生成目录_JAVA合并word文档生成目录
  8. 【Linux】解决Wesnoth中文乱码问题
  9. 渗透测试入门—— 常见术语概述
  10. j计算机集成维护工具,USBOS v2.1电脑超级维护工具启动盘(集成最全winPE)
  11. 【分享】外卖优惠券怎么弄微信返利公众号系统的流程和方法
  12. Ubuntu系统观看IPV6电视的方法详解
  13. 计算机表格怎么互换,excel怎么把单元格交换位置
  14. 逆矩阵的六个注意事项
  15. 计算机注册表命令,注册表命令,小编教你电脑怎么打开注册表编辑器
  16. 语音对话声空计算机APP,空空语音app
  17. 运筹说 第49期 | 走近数理经济学之父一帕累托
  18. 基于JavaWeb的文献管理系统设计与实现
  19. 有关数据包拓展基础知识
  20. JS-for...in/for...of

热门文章

  1. python语言表白语句简单_简短的表白情话
  2. Web前端页面访问权限控制总结
  3. 计算机专业课911,2018年北京物资学院911计算机学科专业基础综合考研复习资料...
  4. [开发过程]<项目管理>TAPD工具
  5. 如何把vs2003转化成vs2005
  6. 突发:史蒂芬·霍金去世,享年76岁!
  7. DM数据库全面调优指南之Linux操作系统
  8. 今天是没有python的一天(大物实验‘利用牛顿环测量曲率半径’报告和大物复习)
  9. 大学四年对比度:看的见的青春渐变
  10. MySQL8下载安装卸载教程