博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[USACO09FEB] 改造路Revamping Trails | [JLOI2011] 飞行路线
阅读量:4542 次
发布时间:2019-06-08

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

题目链接:

其实这两道题基本上是一样的,就是分层图的套路题。

为什么是分层图呢?首先,我们的选择次数比较少,可以把这几层的图建出来而不会爆空间。然后因为选择一个边权为0的路线之后我们就进入了下一个状态,最短路的计算就和不选择这个边权为0的路线完全独立了。

所以我们把每一层的图建出来,相邻图有边的话连0边,其他的按照原样连。dis数组存最短路。\(最后答案就是dis[n*k+end]\),end为终点。

所以所以。。。也没有什么可说的???

注意要写dij,以后图论的题能不写spfa就别写。

#include
#include
#include
#include
#include
#include
#include
#define MAXM 4100000#define MAXN 410000using namespace std;bool done[MAXN];int n,m,edge_number,st,end,k;int dis[MAXN],head[MAXN];struct Edge{int nxt,to,dis;}edge[MAXM];struct Node{ int u,d; friend bool operator <(struct Node x,struct Node y) { return x.d>y.d; }};void add(int from,int to,int dis){ edge[++edge_number].dis=dis; edge[edge_number].to=to; edge[edge_number].nxt=head[from]; head[from]=edge_number;}inline void dij(){ priority_queue
q; memset(dis,0x3f,sizeof(dis)); q.push((Node){st,0}); dis[st]=0; while(!q.empty()) { int u=q.top().u; q.pop(); if(done[u]) continue; done[u]=1; for(int i=head[u];i;i=edge[i].nxt) { int v=edge[i].to; if(dis[v]>dis[u]+edge[i].dis) { dis[v]=dis[u]+edge[i].dis; q.push((Node){v,dis[v]}); } } }}int main(){ scanf("%d%d%d",&n,&m,&k); st=1,end=n; for(int i=1;i<=m;i++) { int u,v,w; scanf("%d%d%d",&u,&v,&w); add(u,v,w); add(v,u,w); for(int j=1;j<=k;j++) { add(u+(j-1)*n,v+j*n,0); add(v+(j-1)*n,u+j*n,0); add(u+j*n,v+j*n,w); add(v+j*n,u+j*n,w); } } for(int i=1;i<=k;i++) add((i-1)*n+end,i*n+end,0); dij(); printf("%d\n",dis[n*k+end]); return 0;}

转载于:https://www.cnblogs.com/fengxunling/p/9870871.html

你可能感兴趣的文章
channel vs mutex
查看>>
页面布局(--FlowLayout,--BorderLayout,--GridLayout)
查看>>
实验吧--web--你真的会php吗
查看>>
python中的setdefault()方法
查看>>
转 VSFTP用户权限管控
查看>>
poj2420 A Star not a Tree? 模拟退火
查看>>
微信小程序--登录授权,一键获取用户微信手机号并登录
查看>>
[转载] C#面向对象设计模式纵横谈——13. Proxy代理模式
查看>>
JqueryEasyUI浅谈---视频教程公布
查看>>
ASP.NET导出Excel,打开时提示“您尝试打开文件'XXX.xls'的格式与文件扩展名指定文件不一致”...
查看>>
Javaweb之 servlet 开发详解1
查看>>
Restore IP Addresses
查看>>
DWR框架简单应用
查看>>
KMP 学习心得-----转
查看>>
time.strftime:格式化字符串中含中文报错处理
查看>>
模态窗口缓存无法清除怎么办? 在地址上加个随机数吧"&rd=" + new Date().getTime()
查看>>
阿里的weex框架到底是什么
查看>>
Tesis enDYNA
查看>>
FxZ,C#开发职位面试测试题(30分钟内必须完成)
查看>>
[HNOI2007]分裂游戏
查看>>