【bzoj2763】 JLOI2011飞行路线 分层最短路
2015-08-13 14:53
267 查看
我会说这是太神给NOIP入门的同学出的题么?!表示今天刚做,虽然以前学过,但这是第一次写,要注意建边的时候只需要建一层的就可以了,然后每次跑spfa的时候,看看能不能跑到下一层。
#include<cstdio> #include<cstring> #include<cstdlib> #include<cmath> #include<iostream> #include<algorithm> #define maxn 200010 #define inf 1000000000 #define maxm 200010 using namespace std; int next[maxm],to[maxm],len[maxm],head[maxn]; int dis[maxn],q[maxn]; bool vis[maxn]; int n,m,T,k,s,t,num; int cal(int x,int y) { return x+y*n; } void addedge(int x,int y,int z) { num++;to[num]=y;len[num]=z;next[num]=head[x];head[x]=num; } void spfa() { for (int i=0;i<=cal(n,k);i++) dis[i]=inf; int l=0,r=1; dis[s]=0;q[1]=s;vis[s]=1; while (l!=r) { l++;if (l==maxn) l=0; int x=q[l]; int d=x/n,t=x%n; for (int p=head[t];p;p=next[p]) { if (dis[cal(to[p],d)]>dis[cal(t,d)]+len[p]) { dis[cal(to[p],d)]=dis[cal(t,d)]+len[p]; if (!vis[cal(to[p],d)]) { vis[cal(to[p],d)]=1; r++;if (r==maxn) r=0; q[r]=cal(to[p],d); } } if (d<k && dis[cal(t,d)]<dis[cal(to[p],d+1)]) { dis[cal(to[p],d+1)]=dis[cal(t,d)]; if (!vis[cal(to[p],d+1)]) { vis[cal(to[p],d+1)]=1; r++;if (r==maxn) r=0; q[r]=cal(to[p],d+1); } } } vis[x]=0; } } int main() { scanf("%d%d%d%d%d",&n,&m,&k,&s,&t); for (int i=1;i<=m;i++) { int x,y,z; scanf("%d%d%d",&x,&y,&z); addedge(x,y,z);addedge(y,x,z); } spfa(); printf("%d\n",dis[cal(t,k)]); return 0; }
相关文章推荐
- VS多行代码替换
- ConnectionPoolTimeoutException故障总结
- Python 之 sklearn 计算 SVM 隶属度
- 【转】Android通过JNI调用驱动程序(完全解析实例)
- JSP等网站【创建带自定义图标的桌面快捷方式】
- ContentProvider的了解
- 帝国CMS与Ucenter同步通信,会员整合
- Please ensure that adb is correctly located at……问题解决方案
- NJUPT JAVA语言 综合图形界面程序设计
- php复制目录下的所有文件及文件夹
- 游戏中的英文名称
- Java多线程编程之Runnable、Thread简介
- 《序列》游戏攻略【07~12】
- 什么是空间复杂度(What is actually Space Complexity ?)
- VS2013 “未找到与约束 ContractName Microsoft.Internal.VisualStudio.PlatformUI.ISolutionAttachedCollectionService RequiredTypeIdentity Microsoft.Internal.VisualStudio.PlatformUI.ISolutionAttachedCollectionService 匹配的导出”
- 一些有价值的Blog推荐
- HDU ACM 2012 素数判定
- Segment set
- 单词计数
- 一切成功源于积累——20150813 复利效应 每天进步一点点到底指的是什么?