#include<iostream>
#include<cstring>
using namespace std;
const int maxn=0x3f3f3f3f;
struct Edge {
int son,father,dis;
} edge[1000000];
int head[20000],cnt,ans[20000];
bool vis[20000];
long long minn=maxn;
inline void add_edge(int q,int z,int dis) {
cnt++;
edge[cnt].son=z,edge[cnt].dis=dis,edge[cnt].father=head[q],head[q]=cnt;
}
int n,m,s,a,b,c
int main() {
ios::sync_with_stdio(0);
cin>>n>>m>>s;
memset(ans,maxn,sizeof(ans));
for(int i=1; i<=m; i++) {
cin>>a>>b>>c;
add_edge(a,b,c);
}
int curr=s;
ans[s]=0;
while(!vis[curr]) {
vis[curr]=1;
for(int i=head[curr]; i!=0; i=edge[i].father) {
if(!vis[edge[i].son]&&ans[edge[i].son]>ans[curr]+edge[i].dis) {
ans[edge[i].son]=ans[curr]+edge[i].dis;
}
}
minn=maxn;
for(int i=1; i<=n; i++) {
if(!vis[i]&&minn>ans[i]) {
minn=ans[i];
curr=i;
}
}
}
for(int i=1; i<=n; i++){
cout<<ans[i]<<" ";
}
return 0;
}
为什么会WA一个点啊?