[JZOJ5551] 【NOI2019模拟6.24】旅途【最短路】
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(m2logm)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】旅途【最短路】相关推荐
- 【NOI2019模拟2019.7.4】朝夕相处 (动态规划+BM)
Description: 题解: 这种东西肯定是burnside引理: \(\sum置换后不动点数 \over |置换数|\) 一般来说,是枚举置换\(i\),则\(对所有x,满足a[x+i]=a[i ...
- 【2011.10.29模拟】24点游戏题解
题目描述 24点游戏是一个非常有意思的游戏,很流行,玩法很简单:给你4张牌,每张牌上有数字(其中A代表1,J代表11,Q代表12,K代表13),你可以利用数学中的加.减.乘.除以及括号想办法得到24, ...
- 51nod 1326 遥远的旅途 最短路建模
题意 给出一个无向图,问从1到n是否存在一条长度为L的路径. n,m<=50,1<=路径长度<=10000,L<=10^18 分析 考虑枚举起点的每一条出边,设其权值为w,那么 ...
- JZOJ5686. 【GDOI2018Day1模拟4.24】狮鹫旅行
Description 狮鹫是联盟的主要交通工具,在艾泽拉斯的土地上散布着n个狮鹫站点,有m条有向的飞行线路,也就是构成了一张n个点m条边的有向图. 这m条线路被分成了c种等级,对于其中的第i种等级, ...
- 5334. 【NOIP2017提高A组模拟8.24】空
Description Input Output Sample Input 3 10 100 1 50 50 100 Sample Output 99 Data Constraint Solution ...
- JZOJ 3804. 【NOIP2014模拟8.24】小X 的AK 计划
Description 在小X 的家乡,有机房一条街,街上有很多机房.每个机房里都有一万个人在切题.小X 刚刷完CodeChef,准备出来逛逛. 机房一条街有n 个机房,第i 个机房的坐标为xi,小X ...
- JZOJ 3806. 【NOIP2014模拟8.24】小X 的道路修建
Description 因为一场不小的地震,Y 省n 个城市之间的道路都损坏掉了,省长希望小X 将城市之间的道路重修一遍. 很多城市之间的地基都被地震破坏导致不能修路了,因此可供修建的道路只有m 条. ...
- 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 ...
- JZOJ 4932. 【NOIP2017提高组模拟12.24】B
Description 现在你有 NN 个数,分别为 A1,A2,-,ANA1,A2,-,AN ,现在有M组询问需要你回答.每个询问将会给你一个L和R(L<=R)(L,保证 MaxAi−MinA ...
- jzoj4800-[GDOI2017模拟9.24]周末晚会【dp,循环重构】
正题 题目大意 nnn个人的圆桌,可以放男可以放女,然后要求不能有连续kkk个女生坐在一起.求方案总数. 解题思路 先不考虑圆桌,设fi,jf_{i,j}fi,j表示放了i个人,最前面有连续jjj个 ...
最新文章
- 码农技术炒股之路——任务管理器
- MySQL 配置数据库编码
- java编程50实例_java编程实例大全及详解谜底(50例).doc
- python基础4(来自廖雪峰的官方网站)
- 华为鸿蒙电脑操作系统测试版,官方公布教程:鸿蒙OS测试版返回EMUI 11
- Linux下简单线程池的实现
- java word文档生成目录_JAVA合并word文档生成目录
- 【Linux】解决Wesnoth中文乱码问题
- 渗透测试入门—— 常见术语概述
- j计算机集成维护工具,USBOS v2.1电脑超级维护工具启动盘(集成最全winPE)
- 【分享】外卖优惠券怎么弄微信返利公众号系统的流程和方法
- Ubuntu系统观看IPV6电视的方法详解
- 计算机表格怎么互换,excel怎么把单元格交换位置
- 逆矩阵的六个注意事项
- 计算机注册表命令,注册表命令,小编教你电脑怎么打开注册表编辑器
- 语音对话声空计算机APP,空空语音app
- 运筹说 第49期 | 走近数理经济学之父一帕累托
- 基于JavaWeb的文献管理系统设计与实现
- 有关数据包拓展基础知识
- JS-for...in/for...of
热门文章
- python语言表白语句简单_简短的表白情话
- Web前端页面访问权限控制总结
- 计算机专业课911,2018年北京物资学院911计算机学科专业基础综合考研复习资料...
- [开发过程]<项目管理>TAPD工具
- 如何把vs2003转化成vs2005
- 突发:史蒂芬·霍金去世,享年76岁!
- DM数据库全面调优指南之Linux操作系统
- 今天是没有python的一天(大物实验‘利用牛顿环测量曲率半径’报告和大物复习)
- 大学四年对比度:看的见的青春渐变
- MySQL8下载安装卸载教程