首页 > 代码库 > SPAF模板
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模板
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。