题目

\(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】旅途的更多相关文章

  1. 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运行环境 ...

  2. 更多文章请访问"程序旅途”

    更多文章请访问我的个人独立博客 程序旅途

  3. P酱的冒险旅途(思维)

    P酱的冒险旅途 Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submit S ...

  4. iOS 开发者旅途中的指南针 - LLDB 调试技术

    文章转载于:iOS 开发者旅途中的指南针 - LLDB 调试技术 今天给大家介绍的内容,无关乎任何功能性开发技术,但又对开发的效率影响至深,这就是调试技术. 何为调试呢,比如我们用 print 函数在 ...

  5. UESTC--758--P酱的冒险旅途(模拟)

    P酱的冒险旅途 Time Limit: 1000MS   Memory Limit: 65535KB   64bit IO Format: %lld & %llu Submit Status ...

  6. hdu分类 Dynamic Programming(这是一场漫长的旅途)

    下面是difficulty 1的题 1003   Max Sum 最长递增子序列.非常经典,最棒的解法是在线算法O(n)的复杂度. 贴的呢,是用dp做的代码. 先是一个高亮的dp递推式,然后找到最大处 ...

  7. Android启示录——开始Android旅途

    为了明年可以开始进行android程序开发,开始从零开始学习android,仅以此代表第一步开始(*^_^*),开始搭建环境…… 1. 软件下载 http://developer.android.co ...

  8. 51Nod 1326 遥远的旅途

    题目描述: 一个国家有N个城市,这些城市被标为0,1,2,...N-1.这些城市间连有M条道路,每条道路连接两个不同的城市,且道路都是双向的.一个小鹿喜欢在城市间沿着道路自由的穿梭,初始时小鹿在城市0 ...

  9. 【51Nod】-1326 遥远的旅途

    Description 一个国家有 N 个城市, 这些城市被标为 0,1,2,...N-1. 这些城市间连有 M 条道路, 每条 道路连接两个不同的城市, 且道路都是双向的. 一个小鹿喜欢在城市间沿着 ...

随机推荐

  1. Prometheus监控学习笔记之Grafana用户权限分组

    Grafana有账户分权和管理功能,不过和一般的账户分权管理操作不一样.Grafana通过admin账户建立organization,在不通的org内配置数据源和用户,用户隶属于不通的org,只能看到 ...

  2. 二十三、并发编程之深入解析Condition源码

    二十三.并发编程之深入解析Condition源码   一.Condition简介 1.Object的wait和notify/notifyAll方法与Condition区别 任何一个java对象都继承于 ...

  3. java中反射知识点总结

      1 package Demo; 2 3 import java.lang.reflect.Constructor; 4 import java.lang.reflect.Field; 5 impo ...

  4. mysql 中 and和or 一起使用和之间的优先级

    SELECT address,job_title,education,SUM(recruiting) FROM commerce_jobs WHERE education = '大专' and ( j ...

  5. 来自后端的逆袭 blazor简介 全栈的福音

    背景 什么是SPA 什么是MPA MPA (Multi-page Application) 多页面应用指的就是最传统的 HTML 网页设计,早期的网站都是这样的设计,所之称为「网页设计」.使用 MPA ...

  6. DotnetSpider爬虫简单示例 net core

    文章地址 https://blog.csdn.net/sD7O95O/article/details/78097556 安装爬虫框架  NUGET 安装DotnetSpider 创建HTTP协议数据包 ...

  7. MySQL卸载与重装

    [卸载] 不推荐使用控制面板-->卸载程序,来卸载,容易出现报错. 使用电脑管家卸载很轻松. [删除注册列表] HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\S ...

  8. IIS 7.5绑定中文域名转码启动站点报“值不在预期的范围内”

    问题现象 IIS 7.5在绑定中文域名转码后,启动站点会出现[值不在预期的范围内]: 解决方案 此问题是由于中文域名绑定错误导致的,IIS 7.5针对中文域名会自动转换为punycode码,所以不需要 ...

  9. 图解再谈ssh port forwarding-ssh隧道技术

    https://www.ramkitech.com/2012/04/how-to-do-ssh-tunneling-port-forwarding.html https://www.cnblogs.c ...

  10. js多个参数(追加参数)

    /** * 多个参数 * @param fn * @param args * @param scope */ function multipleArguments(fn,args,scope){ if ...