【JZOJ5551】【20190625】旅途
题目
\(n\)个点\(m\)条边的无向图,一条路径的代价定义为路径上前\(k\)大边的边权和
对于$k = n \to 1 $,求1-n的最短路
\(n,m \le 3000 \ , \ w_i \le 10^9\)
题解
- 60pts
- 枚举最小的边\(e\)将边分为 $ \ge e $ 和 $ <e $ ,后者边权设为0,设\(dp_{i,j}\)表示走到\(i\),\(\ge e\)的边走了\(j\)条的概率
- 用\(dp_{n,k}\)去更新答案,需要预先做一边最短路考虑边数不够的情况
- 时间复杂度:\(O(m^2n\ log \ m)\)
- 100pts
- 枚举最小的\(e\),将每条边的边权设置为\(max\{0,w - w_e\}\) ,做Dij,用\(dis_{n} + k \times w_e\)更新答案
- 时间复杂度:\(O(mn \log m)\)
#include<bits/stdc++.h>
#define ll long long
#define inf 1e18
using namespace std;
const int N=3010;
int T,n,m,o,hd[N],vis[N],del[N<<1],id[N<<1];
ll dis[N],ans[N];
struct Edge{int u,v,w,nt;}E[N<<1];
void adde(int u,int v,int w){
E[o]=(Edge){u,v,w,hd[u]};hd[u]=o++;
E[o]=(Edge){v,u,w,hd[v]};hd[v]=o++;
}
bool cmp(int x,int y){return E[x].w==E[y].w?x<y:E[x].w<E[y].w;}
struct data{
int u;ll w;
data(int _u=0):u(_u){w=dis[u];};
bool operator <(const data&A)const{return w>A.w;};
};
priority_queue<data>q;
void dijkstra(int e){
for(int i=1;i<=n;++i)dis[i]=inf;
++T;dis[1]=0;q.push(1);
while(!q.empty()){
int u=q.top().u;q.pop();
if(vis[u]==T)continue;
vis[u]=T;
for(int i=hd[u];i;i=E[i].nt){
int v=E[i].v;
if(del[i]){
if(dis[v]>dis[u]){
dis[v]=dis[u];
if(vis[v]!=T)q.push(v);
}
}else{
if(dis[v]>dis[u]+E[i].w-e){
dis[v]=dis[u]+E[i].w-e;
if(vis[v]!=T)q.push(v);
}
}
}
}
for(int i=1;i<=n;++i)ans[i]=min(ans[i],dis[n]+1ll*e*i);
}
int main(){
freopen("journey.in","r",stdin);
freopen("journey.out","w",stdout);
scanf("%d%d",&n,&m);o=1;
for(int i=1;i<=m;++i){
int u,v,w;
scanf("%d%d%d",&u,&v,&w);
adde(u,v,w);
}
for(int i=1;i<o;++i)id[i]=i;
sort(id+1,id+o,cmp);
for(int i=1;i<=n;++i)ans[i]=inf;
dijkstra(0);
for(int i=1;i<o;++i){
int now=id[i];
if(del[now])continue;
del[now]=del[now+1]=1;
dijkstra(E[now].w);
}
for(int i=n;i;--i)printf("%lld\n",ans[i]);
return 0;
}
【JZOJ5551】【20190625】旅途的更多相关文章
- seL4之hello-2旅途(完成更新)
seL4之hello-2旅途 2016/11/19 13:15:38 If you like my blog, please buy me a cup of coffee. 回顾上周 seL4运行环境 ...
- 更多文章请访问"程序旅途”
更多文章请访问我的个人独立博客 程序旅途
- P酱的冒险旅途(思维)
P酱的冒险旅途 Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Submit S ...
- iOS 开发者旅途中的指南针 - LLDB 调试技术
文章转载于:iOS 开发者旅途中的指南针 - LLDB 调试技术 今天给大家介绍的内容,无关乎任何功能性开发技术,但又对开发的效率影响至深,这就是调试技术. 何为调试呢,比如我们用 print 函数在 ...
- UESTC--758--P酱的冒险旅途(模拟)
P酱的冒险旅途 Time Limit: 1000MS Memory Limit: 65535KB 64bit IO Format: %lld & %llu Submit Status ...
- hdu分类 Dynamic Programming(这是一场漫长的旅途)
下面是difficulty 1的题 1003 Max Sum 最长递增子序列.非常经典,最棒的解法是在线算法O(n)的复杂度. 贴的呢,是用dp做的代码. 先是一个高亮的dp递推式,然后找到最大处 ...
- Android启示录——开始Android旅途
为了明年可以开始进行android程序开发,开始从零开始学习android,仅以此代表第一步开始(*^_^*),开始搭建环境…… 1. 软件下载 http://developer.android.co ...
- 51Nod 1326 遥远的旅途
题目描述: 一个国家有N个城市,这些城市被标为0,1,2,...N-1.这些城市间连有M条道路,每条道路连接两个不同的城市,且道路都是双向的.一个小鹿喜欢在城市间沿着道路自由的穿梭,初始时小鹿在城市0 ...
- 【51Nod】-1326 遥远的旅途
Description 一个国家有 N 个城市, 这些城市被标为 0,1,2,...N-1. 这些城市间连有 M 条道路, 每条 道路连接两个不同的城市, 且道路都是双向的. 一个小鹿喜欢在城市间沿着 ...
随机推荐
- Linux学习笔记之vim操作指令大全
0x00 关于Vim Vim是款强大的文本编辑器,但是众多指令需要学习,这次记录了指令大全方便以后翻阅. Vim的几种模式 正常模式:可以使用快捷键命令,或按:输入命令行. 插入模式:可以输入文本,在 ...
- C#生成唯一不重复订单号帮助类
1.使用场景 通常,在做一些表单的功能时,需要生成唯一不重复的订单单号,本文提供的帮助类可以适合大多数场景的单号生成使用,拿来即用,方便快捷无重复.而且,在高并发的情况下也是可以使用的. 之前看到有人 ...
- Docker Cheatsheet
一.创建 docker create:创建容器,处于停止状态. centos:latest:centos容器:最新版本(也可以指定具体的版本号).本地有就使用本地镜像,没有则从远程镜像库拉取.创建成功 ...
- Git 多人协作 以及推送分支
参考链接:https://www.liaoxuefeng.com/wiki/896043488029600/900375748016320 当你从远程仓库克隆时,实际上Git自动把本地的仓库的mast ...
- python3对字符串进行base64转码
import base64# 使用base64的b64encode()进行转码,转码之后在用‘utf-8’解码# s 要转码的字符串res = base64.b64encode(s.encode(&q ...
- 2019 找钢网java面试笔试题 (含面试题解析)
本人5年开发经验.18年年底开始跑路找工作,在互联网寒冬下成功拿到阿里巴巴.今日头条.找钢网等公司offer,岗位是Java后端开发,因为发展原因最终选择去了找钢网,入职一年时间了,也成为了面试官 ...
- Java自学-日期 Calendar
Java的Calendar类 Calendar类即日历类,常用于进行"翻日历",比如下个月的今天是哪天 示例 1 : Calendar与Date进行转换 采用单例模式获取日历对象C ...
- 【转载】C#中ArrayList集合类使用Add方法添加元素
ArrayList集合是C#中的一个非泛型的集合类,是弱数据类型的集合类,可以使用ArrayList集合变量来存储集合元素信息,任何数据类型的变量都可加入到同一个ArrayList集合中,因此使用Ar ...
- mysql编译安装下载地址(官网)
https://dev.mysql.com/get/Downloads/MySQL-version number/mysql-version number.tar.gz 把这个地址上面的版本号改成自己 ...
- prometheus学习系列四: Prometheus详述
数据模型 Prometheus 是将所有数据存为时序数据. 每个时序数据是由指标名称和可选的键值对(称之为标签)唯一标识. 度量类型 counter: 单调递增的计数器,如果标识已经服务的请求数量可以 ...