您的位置:首页 > 其它

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

2016-08-10 21:47 483 查看
题目链接

#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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: