HIHO #1093 : 最短路径·三:SPFA算法

来源:互联网 发布:阿里云发票造假 编辑:程序博客网 时间:2024/05/22 05:18

题目链接

#include<bits/stdc++.h>using namespace std;#define cl(a,b) memset(a,b,sizeof(a))#define LL long long#define pb push_back#define gcd __gcd#define For(i,j,k) for(int i=(j);i<k;i++)#define lowbit(i) (i&(-i))#define _(x) printf("%d\n",x)const int maxn = 1e6+10;const int inf  = 1 << 28;vector<pair<int,int> > G[maxn];bool inq[maxn];int d[maxn];int spfa(int s,int t){    cl(inq,false);    queue<int> q;    for(int i=0;i<maxn;i++)d[i]=inf;    q.push(s);    d[s]=0;    inq[s]=true;    while(!q.empty()){        int u = q.front();q.pop();        for(int i=0;i<G[u].size();i++){            int v = G[u][i].first;            int w = G[u][i].second;            if(d[u]+w<d[v]){                d[v] = d[u] + w;                if(!inq[v]){                    inq[v]=true;                    q.push(v);                }            }        }        inq[u]=false;    }    return d[t];}int main(){    int n,m,s,t;    cin>>n>>m>>s>>t;    for(int i=0;i<m;i++){        int x,y,z;cin>>x>>y>>z;        G[x].pb(make_pair(y,z));        G[y].pb(make_pair(x,z));    }    cout<<spfa(s,t)<<endl;    return 0;}
0 0
原创粉丝点击