SPAF模板
Posted asuml
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SPAF模板相关的知识,希望对你有一定的参考价值。
#include <iostream> #include <cstring> #include <queue> #include <cstdio> #define INF 0x3f3f3f using namespace std; const int L = 200000; struct Edge{ int to; int next; int dis; }e[L*2]; int n,m,s; int dist[L]; bool tag[L]; int num[L]; int head[L]; bool SPAF(int v0) { queue<int> q; dist[v0]=0; q.push(v0); num[v0]++; tag[v0]=true; while(!q.empty()) { int t=q.front(); q.pop(); tag[t]=false; for(int i=head[t];i!=-1;i=e[i].next) { int v=e[i].to; if(dist[v]>dist[t]+e[i].dis) { dist[v]=dist[t]+e[i].dis; if(!tag[v]) { tag[v]=true; q.push(v); num[v]++; if(num[v]>n) return false; } } } } return true; } int main() { cin>>n>>m>>s; int u,v,w; for(int i=0;i<=n;i++) { head[i]=-1; dist[i]=INF; tag[i]=false; num[i]=0; } for(int i=1;i<=m;i++) { scanf("%d%d%d",&u,&v,&w); e[i].to=v; e[i].dis=w; e[i].next=head[u]; head[u]=i; } if(SPAF(s)) { for(int i=1;i<=n;i++) if(dist[i]<INF) cout<<dist[i]<<endl; else cout<<"NO PATH"<<endl; } return 0; }
以上是关于SPAF模板的主要内容,如果未能解决你的问题,请参考以下文章