明明样例和数据1自己测是过了的呀,为什么爆零。。。
#include<bits/stdc++.h>
using namespace std;
struct data
{
int nxt,num;
};
vector<data> a[100005];
int n,m,s,x,y,z,num[100005];
bool vis[100005];
queue<int> q;
void spfa(int start)
{
memset(num,(1<<31-1),sizeof(num));
memset(vis,false,sizeof(vis));
q.push(start);
vis[start]=true;
num[start]=0;
while(!q.empty())
{
int head=q.front();
vis[head]=false;
q.pop();
for(register int i=0;i<a[head].size();i++)
{
if(num[head]+a[head][i].num<num[a[head][i].nxt])
{
num[a[head][i].nxt]=num[head]+a[head][i].num;
if(!vis[a[head][i].nxt])
{
vis[a[head][i].nxt]=true;
q.push(a[head][i].nxt);
}
}
}
}
}
int main()
{
scanf("%d%d%d",&n,&m,&s);
for(register int i=1;i<=m;i++) scanf("%d%d%d",&x,&y,&z),a[x].push_back(data{y,z});
spfa(s);
for(register int i=1;i<=n;i++)
{
printf("%d\n",num[i]);
}
}