Extended Traffic LightOJ - 1074 spfa判断负环
Posted qingyuyyyyy
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Extended Traffic LightOJ - 1074 spfa判断负环相关的知识,希望对你有一定的参考价值。
//判断负环 在负环内的城市输出? #include <iostream> #include <queue> #include <cstdio> #include <algorithm> #include <string.h> #include <string> using namespace std; typedef long long LL; const int N=4e5+10; int abc[205]; int T,n,m,q; int h[N],e[N],ne[N],w[N],idx; int len(int u,int v){ return (abc[v]-abc[u])*(abc[v]-abc[u])*(abc[v]-abc[u]); } void add(int a,int b) { e[idx]=b; w[idx]=len(a,b); ne[idx]=h[a]; h[a]=idx++; } int dist[205],st[205],times[205],cycle[205]; void spfa() { memset(dist,125,sizeof(dist)); memset(st,0,sizeof(st)); memset(times,0,sizeof(times)); memset(cycle,0,sizeof(cycle)); queue<int>q; st[1]=times[1]=1; dist[1]=0; q.push(1); while(q.size()) { int u=q.front(); q.pop(); st[u]=0; for(int i=h[u];~i;i=ne[i]) { int v=e[i]; if(cycle[v]) continue; if(dist[v]-dist[u]>w[i]) { dist[v]=dist[u]+w[i]; if(!st[v]) { st[v]=1; times[v]++; q.push(v); } if(times[v]>n) cycle[v]=1; } } } } int main() { cin>>T; for(int t=1;t<=T;t++) { idx=0; memset(h,-1,sizeof h); cin>>n; for(int i=1;i<=n;i++) cin>>abc[i]; cin>>m; int a,b; while(m--) { cin>>a>>b; add(a,b); } spfa(); cin>>q; printf("Case %d: ",t); while(q--) { cin>>a; if(dist[a]<3||dist[a]>=(int)1e9||cycle[a]) printf("? "); else printf("%d ",dist[a]); } } }
以上是关于Extended Traffic LightOJ - 1074 spfa判断负环的主要内容,如果未能解决你的问题,请参考以下文章
LightOj1074 - Extended Traffic(SPFA最短路)
LightOJ 1074 - Extended Traffic SPFA
LightOJ - 1074 Extended Traffic(标记负环)
LightOJ 1074 - Extended Traffic SPFA(经典)