莫名其妙找到的板子
#include <iostream>
#include <cstring>
#include <queue>
using namespace std;
struct edge
{
int v,w,next;
}a[500001];
int link[10001],d[10001],n,m,s,X,Y,Z;
bool v[10001];
queue<int>q;
void add(int u,int v,int w)
{
static int p=0;
p++;
a[p].v=v;
a[p].w=w;
a[p].next=link[u];
link[u]=p;
}
int main()
{
cin >> n >> m >> s;
for(int i=1;i<=m;i++)
{
cin >> X >> Y >> Z;
add(X,Y,Z);
}
q.push(s);
v[s]=true;
memset(d,0x3F,sizeof(d));
d[s]=0;
while(!q.empty())
{
int x=q.front();
q.pop();
v[x]=false;
for(int i=link[x];i!=0;i=a[i].next)
{
if(d[x]+a[i].w<d[a[i].v])
{
d[a[i].v]=d[x]+a[i].w;
if(v[a[i].v]==false)
{
v[a[i].v]=true;
q.push(a[i].v);
}
}
}
}
for(int i=1;i<=n;i++)
{
cout << d[i] << ' ';
}
return 0;
}