堆优化dijikstra,1,3,AC了,其他是WA
#include<bits/stdc++.h>
#include<cmath>
#define inf 2147483647
#define ll long long
using namespace std;
int net[500050],t[500050],v[500005];
struct node{
int v,si;
bool operator < (const node &b)const
{
return v<b.v;
}
};
priority_queue<node>q;
ll f[10005],used[10005];
int num=0,head[10005];
void add_(int from,int to,int value)
{
t[++num]=to;
v[num]=value;
net[num]=head[from];
head[from]=num;
}
int main()
{
int n,m,s;
scanf("%ld %ld %ld",&n,&m,&s);
for(int i=1,a,b,c;i<=m;i++)
{
cin>>a>>b>>c;
add_(a,b,c);
}
for(int i=1;i<=n;i++)
{
f[i]=inf;
}
f[s]=0;
node sa;
sa.si=s;
sa.v=0;
q.push(sa);
while(!q.empty())
{
node x=q.top();
q.pop();
if(used[x.si]) continue;
used[x.si]=1;
for(int i=head[x.si];i;i=net[i])
{
if(f[t[i]]>f[x.si]+v[i]){
f[t[i]]=f[x.si]+v[i];
sa.v=f[t[i]];
sa.si=t[i];
q.push(sa);
}
}
}
for(int i=1;i<=n;i++)
cout<<f[i]<<" ";
return 0;
}