博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
分层图最短路 【bzoj1579】[Usaco2009 Feb]Revamping Trails 道路升级
阅读量:4597 次
发布时间:2019-06-09

本文共 1954 字,大约阅读时间需要 6 分钟。

1579: [Usaco2009 Feb]Revamping Trails 道路升级

Description

每天,农夫John需要经过一些道路去检查牛棚N里面的牛. 农场上有M(1<=M<=50,000)条双向泥土道路,编号为1..M. 道路i连接牛棚P1_i和P2_i (1 <= P1_i <= N; 1 <= P2_i<= N). John需要T_i (1 <= T_i <= 1,000,000)时间单位用道路i从P1_i走到P2_i或者从P2_i 走到P1_i 他想更新一些路经来减少每天花在路上的时间.具体地说,他想更新K (1 <= K <= 20)条路经,将它们所须时间减为0.帮助FJ选择哪些路经需要更新使得从1到N的时间尽量少.

Input

* 第一行: 三个空格分开的数: N, M, 和 K * 第2..M+1行: 第i+1行有三个空格分开的数:P1_i, P2_i, 和 T_i

Output

* 第一行: 更新最多K条路经后的最短路经长度.

刷水助于身心健康。

#include
#include
#include
#include
using namespace std;const int wx=100017;inline int read(){ int sum=0,f=1;char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();} while(ch>='0'&&ch<='9'){sum=(sum<<1)+(sum<<3)+ch-'0';ch=getchar();} return sum*f;}struct e{ int nxt,to,dis;}edge[wx*2];struct node{ int u,d,ks; friend bool operator < (const node& a,const node& b){ return a.d>b.d; }};int n,m,k,num;int head[wx];int dis[wx][27],vis[wx][27];void add(int from,int to,int dis){ edge[++num].nxt=head[from]; edge[num].to=to; edge[num].dis=dis; head[from]=num;}priority_queue
q;void Dij(){ memset(dis,0x3f,sizeof dis); dis[1][0]=0;q.push((node){1,0,0}); while(q.size()){ node u=q.top();q.pop(); if(vis[u.u][u.ks])continue;vis[u.u][u.ks]=1; for(int i=head[u.u];i;i=edge[i].nxt){ int v=edge[i].to; if(dis[v][u.ks]>dis[u.u][u.ks]+edge[i].dis){ dis[v][u.ks]=dis[u.u][u.ks]+edge[i].dis; q.push((node){v,dis[v][u.ks],u.ks}); } if(u.ks
dis[u.u][u.ks]){ dis[v][u.ks+1]=dis[u.u][u.ks]; q.push((node){v,dis[v][u.ks+1],u.ks+1}); } } }}int main(){ n=read();m=read();k=read(); for(int i=1;i<=m;i++){ int x,y,z; x=read();y=read();z=read(); add(x,y,z);add(y,x,z); } Dij(); printf("%d\n",dis[n][k]); return 0;}

转载于:https://www.cnblogs.com/wangxiaodai/p/9761527.html

你可能感兴趣的文章
绘图-路径
查看>>
恢复sudo的权限的命令
查看>>
使用appledoc
查看>>
转:Loadrunner添加服务器监控
查看>>
remove debug symbols to a seperate file
查看>>
ArcGIS ArcMap “ Add Data” 打开后,一直卡死,无内容
查看>>
在C#中使用属性控件添加属性窗口
查看>>
Java 消息队列-Java并发编程 阻塞队列
查看>>
Web Service简介
查看>>
Java 内存模型- Java Memory Model
查看>>
同步锁Lock
查看>>
Spark RDD的设计与运行原理
查看>>
缺少libz.so
查看>>
jquery 的一些基本操作
查看>>
Nginx 的 docker 部署
查看>>
Linux 下应用程序最大打开文件数的理解和修改【转】
查看>>
[HNOI2018]毒瘤
查看>>
第一次WM_PAINT事件执行前显示白色框 的解决办法
查看>>
快速备份和还原 MySQL 数据库的另一种方法
查看>>
Java读取其他jar包里的配置文件
查看>>