bzoj3575: [Hnoi2014]道路堵塞
2016-05-17 20:07
274 查看
一开始看错题啦!
某一条边不走的最短路相当于1--沿最短路-->x-->……-->y--沿最短路-->n,于是定义T{l,r},表示从起点到最短路上序号r有一条长度为l的非最短路。然后用堆维护即可。(慎用memset。。)TLE。。。
某一条边不走的最短路相当于1--沿最短路-->x-->……-->y--沿最短路-->n,于是定义T{l,r},表示从起点到最短路上序号r有一条长度为l的非最短路。然后用堆维护即可。(慎用memset。。)TLE。。。
#include<iostream> #include<cstdio> #include<queue> #include<cstdlib> #include<cstring> #define N 100005 using namespace std; int n,m,L,x,y,z,ord ,L2 ,a ; int first ,next[N<<1],frm[N<<1],to[N<<1],len[N<<1],l; int q ,val ,st ,h,dis ; bool fl ,inQ ; struct T{int l,r;}; bool operator<(T a,T b){return a.l>b.l;} priority_queue<T>S; void link(int x,int y,int z) { frm[++l]=x;to[l]=y;len[l]=z;next[l]=first[x];first[x]=l; } void SPFA(int u,int v,int k) { int head=0,tail=1;q[1]=u; while (head!=tail) { head%=N; int x=q[++head];inQ[x]=0; for (int i=first[x];i;i=next[i]) if (i!=k) { int y=to[i]; if (ord[y]>=ord[v]) { if (!fl[y]) fl[y]=1,st[++h]=y,val[y]=dis[x]+len[i]; else val[y]=min(val[y],dis[x]+len[i]); } else if (dis[y]>dis[x]+len[i]) { dis[y]=dis[x]+len[i]; if (!inQ[y]) inQ[y]=1,tail%=N,q[++tail]=y; } } } for (int t;h;h--) t=st[h],S.push((T){val[t]+L2[t],ord[t]}),fl[t]=0; } int main() { scanf("%d%d%d",&n,&m,&L); for (int i=1;i<=m;i++) scanf("%d%d%d",&x,&y,&z),link(x,y,z); ord[1]=1; for (int i=1;i<=L;i++) scanf("%d",&a[i]),ord[to[a[i]]]=i+1; for (int i=L;i>=1;i--) L2[frm[a[i]]]=L2[to[a[i]]]+len[a[i]]; memset(dis,0x3f,sizeof dis);dis[1]=0; for (int i=1;i<=L;i++) { int u=frm[a[i]],v=to[a[i]]; for (SPFA(u,v,a[i]);!S.empty()&&S.top().r<ord[v];S.pop()); printf("%d\n",S.empty()?-1:S.top().l); dis[v]=dis[u]+len[a[i]]; } return 0; }
相关文章推荐
- HDU 1044 bfs+dfs
- Ptmind 遇见最好的你!
- 札记-ryu l3 switch & mapreduce
- Jmeter中的几个重要测试指标释义
- 基于SpringMVC的RESTful API设计
- bzoj 3931(spfa+最大流)
- CoreData多线程安全
- css float left right 中间空间城数据无法显示
- 大型网站架构系列:负载均衡详解(上)
- Unity3D-NavMesh导航网格寻路
- 素数判断
- Git——跟踪或取消跟踪文件
- iOS设计规范
- 定义长方体类,数据成员有长、宽、高,成员函数有带默认形参值的构造函数(默认长宽高分别为2.5、3.4、2)、计算体积函数,分别构造默认对象和长宽高分别为6.25、4.8、5.2的对象,输出各对象的体积
- LeetCode -- Word Ladder
- BZOJ4551: [Tjoi2016&Heoi2016]树
- 51nod-1289-大鱼吃小鱼(栈的应用)
- 杭电1509
- 笔试题58. LeetCode OJ (45)
- Codeforces Round #353 (Div. 2) C. Money Transfers 环、贪心、前缀和推广、好题