我滴代码QAQ:
#include<iostream>
#include<cstdio>
#include<queue>
#include<vector>
using namespace std;
vector <bool>vis;
vector <int>head,to,nxt,dis,d,cnt;
const int inf = 1e9 + 1;
int n,m,s;
queue <int>q;
void my_add(int u,int v,int w){
dis.push_back(w);
to.push_back(v);
nxt.push_back(head[u]);
head[u] = nxt.size() - 1;
return;
}
bool spfa(){
d[s] = 0;
vis[s] = 1;
q.push(s);
while(q.size()){
int x = q.front();
q.pop();
vis[x] = 0;
for(int i = head[x]; i != -1; i = nxt[i]){
int y = to[i];
int z = dis[i];
if(d[y] > d[x] + z){
d[y] = d[x] + z;
cnt[y] = cnt[x] + 1;
if(cnt[y] >= n)return false;
if(vis[y] == false){
vis[y] = true;
q.push(y);
}
}
}
}
return true;
}
int main(){
cin>>n>>m>>s;
head.resize(n+1,-1);
vis.resize(n+1,-1);
cnt.resize(n+1,0);
d.resize(n+1,inf);
for(int i = 1; i <= m; ++i){
int u,v,w;
cin>>u>>v>>w;
my_add(u,v,w);
}
if(spfa() == false){
cout<<-1;
return 0;
}else{
for(int i = 1; i <= n; ++i){
if(d[i] == inf){
cout<<2147483647<<' ';
}else{
cout<<d[i]<<' ';
}
}
}
return 0;
}
Orz