题目

\(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. ad域的那些事儿

    先附上参考链接,有空再来整理 基础知识:https://www.cnblogs.com/cnjavahome/p/9029665.html ad域的操作:https://www.cnblogs.com ...

  2. SQL server中常用sql语句

    --循环执行插入10000条数据 declare @ID intbeginset @ID=1 while @ID<=10000begininsert into table_name values ...

  3. Android studio 混淆配置

    混淆 studio 使用Proguard进行混淆,其是一个压缩.优化和混淆java字节码文件的一个工具. 功能:Shrinking(压缩).Optimization(优化).Obfuscattion( ...

  4. Spring Security OAuth2.0 - AuthorizationServer和ResourceServer分离

    <Spring Security实现OAuth2.0授权服务 - 基础版>和<Spring Security实现OAuth2.0授权服务 - 进阶版>两篇文章中介绍如何搭建OA ...

  5. js 递归遍历对象 插入属性 遍历树结构

    // 向 info下面 每一项 插入 isShow test() { const _this = this; _this.info.isShow = false; let iteration = fu ...

  6. jvm学习笔记之class文件的加载、初始化

    编写的java文件在要真正运行时,会首先被编译成 “.class"结尾的二进制文件,然后被虚拟机加载.那么在虚拟机中一个class文件要成为java实例,需要经历好几个步骤: 1.装载:装载 ...

  7. adb shell get/setprop, setenforce...

    adb shell getprop <key> 获取设备参数信息adb shell setprop <key> <value> 设置设备参数信息 例子1:>C ...

  8. C#语法一些简化备忘

    有些传统的写法,可以简写,之前没留意到,现在才注意到 IDE0031: Null check can be simplified entity.Unit = entity.Unit == null ? ...

  9. jsp 获取后端配置文件.properties的某个配置内容

    如后端有个叫做config.properties的配置文件: sys.img=st_sp jsp中引用的方式是: <%@ page language="java" impor ...

  10. prometheus学习系列十一: Prometheus 报警规则配置

    prometheus监控系统的的报警规则是在prometheus这个组件完成配置的. prometheus支持2种类型的规则,记录规则和报警规则, 记录规则主要是为了简写报警规则和提高规则复用的, 报 ...