P3720 [AHOI2017初中组]guide
Posted sfwr-you
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了P3720 [AHOI2017初中组]guide相关的知识,希望对你有一定的参考价值。
常规最短路,和USACO重题
#include<bits/stdc++.h> using namespace std; int n,m,a,b,c,d,ne,head[501000],head2[501000],vis[501000],dis[501000]; struct nodeint nxt,to,from,d1,d2;eg[501000]; struct ndint nxt,to,dis;eg2[501000]; void adde(int u,int v,int v1,int v2) eg[++ne].d1=v1;eg[ne].d2=v2;eg[ne].from=u;eg[ne].to=v;eg[ne].nxt=head[u]; head[u]=ne;eg2[ne].nxt=head2[v];eg2[ne].to=u; head2[v]=ne; void spfa(int sart) queue<int>q; memset(dis,0x3f,sizeof(dis)); dis[sart]=0; vis[sart]=1; q.push(sart); while(!q.empty()) int u=q.front(); q.pop(); vis[u]=0; for(int i=head[u];i;i=eg[i].nxt) int v=eg[i].to; if(dis[v]>dis[u]+eg[i].d1) dis[v]=dis[u]+eg[i].d1; if(!vis[v])vis[v]=1;q.push(v); for(int i=1;i<=m;i++) if(dis[eg[i].to]!=dis[eg[i].from]+eg[i].d1)eg2[i].dis++; memset(dis,0x3f,sizeof(dis)); dis[sart]=0; vis[sart]=1; q.push(sart); while(!q.empty()) int u=q.front(); q.pop(); vis[u]=0; for(int i=head[u];i;i=eg[i].nxt) int v=eg[i].to; if(dis[v]>dis[u]+eg[i].d2) dis[v]=dis[u]+eg[i].d2; if(!vis[v])vis[v]=1;q.push(v); for(int i=1;i<=m;i++) if(dis[eg[i].to]!=dis[eg[i].from]+eg[i].d2)eg2[i].dis++; void spfa2(int sart) queue<int>q; memset(dis,0x3f,sizeof(dis)); dis[sart]=0; vis[sart]=1; q.push(sart); while(!q.empty()) int u=q.front(); q.pop(); vis[u]=0; for(int i=head2[u];i;i=eg2[i].nxt) int v=eg2[i].to; if(dis[v]>dis[u]+eg2[i].dis) dis[v]=dis[u]+eg2[i].dis; if(!vis[v])vis[v]=1;q.push(v); int main() cin>>n>>m; for(int i=1;i<=m;i++) cin>>a>>b>>c>>d; adde(b,a,c,d); spfa(n); spfa2(1); cout<<dis[n];
以上是关于P3720 [AHOI2017初中组]guide的主要内容,如果未能解决你的问题,请参考以下文章
luogu3720 [AHOI2017初中组]guide[最短路]