博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
bzoj 1726: [Usaco2006 Nov]Roadblocks第二短路【dijskstra】
阅读量:4649 次
发布时间:2019-06-09

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

严格次短路模板,用两个数组分别维护最短路和次短路,用dijskstra,每次更新的时候先更新最短路再更新次短路

写了spfa版的不知道为啥不对……

#include
#include
#include
using namespace std;const int N=5005,inf=1e9;int n,m,h[N],cnt,d1[N],d2[N];struct qwe{ int ne,to,va;}e[200005];int read(){ int r=0,f=1; char p=getchar(); while(p>'9'||p<'0') { if(p=='-') f=-1; p=getchar(); } while(p>='0'&&p<='9') { r=r*10+p-48; p=getchar(); } return r*f;}void add(int u,int v,int w){ cnt++; e[cnt].ne=h[u]; e[cnt].to=v; e[cnt].va=w; h[u]=cnt;}int main(){ n=read(),m=read(); for(int i=1;i<=m;i++) { int x=read(),y=read(),z=read(); add(x,y,z),add(y,x,z); } priority_queue
,vector
>,greater
> >q; for(int i=1;i<=n;i++) d1[i]=d2[i]=inf; d1[1]=0; q.push(make_pair(0,1)); while(!q.empty()) { int w=q.top().first,u=q.top().second; q.pop(); if(w>d2[u]) continue; for(int i=h[u];i;i=e[i].ne) { int d=w+e[i].va; if(d1[e[i].to]>d) { swap(d1[e[i].to],d); q.push(make_pair(d1[e[i].to],e[i].to)); } if(d1[e[i].to]
d) { d2[e[i].to]=d; q.push(make_pair(d2[e[i].to],e[i].to)); } } } printf("%d\n",d2[n]); return 0;}

转载于:https://www.cnblogs.com/lokiii/p/8969679.html

你可能感兴趣的文章
CacheManager操作缓存
查看>>
poj 2723 2-SAT问题
查看>>
javascript之常用事件
查看>>
django request对象和HttpResponse对象
查看>>
【Android进阶】Junit单元測试环境搭建以及简单有用
查看>>
《转》 在C++中使用TinyXML2解析xml
查看>>
常用数据类型使用
查看>>
StereoBM::disp12MaxDiff Crash the Release
查看>>
[LintCode] Reverse Pairs 翻转对
查看>>
C#时常需要调用C++DLL
查看>>
Python学习总结之四 -- 这就是Python的字典
查看>>
树的遍历
查看>>
C++ STL之list具体解释
查看>>
Android与IOS异同点对照(1)------ 显示
查看>>
Android API Guides---Supporting Tablets and Handsets
查看>>
The Breakpoint will not currently be hit. No executable code associated with this line
查看>>
JS正则校验
查看>>
Extending WCF using IServiceBehavior, IOperationBehavior, and IParameterInspector
查看>>
SQL 语句(原生)
查看>>
win10电脑突然开不了热点,怎么办
查看>>