临近CSP-S结果连个dijkstra都写不明白了/kk
#include<bits/stdc++.h>
#define ll long long
#define ull unsigned long long
#define pr(x) printf("%d",x)
#define db double
#define Fe getchar()
#define Au puts("")
#define For(i,x,y) for(register int i=x;i<=y;i++)
#define Rep(i,x,y) for(register int i=x;i>=y;i--)
using namespace std;
const int inf=2147483647;
const int mod=1e9+7;
inline int read()
{
int x=0,f=1;
char c=getchar();
while(!isdigit(c))
{
if(c=='-')
f=-1;
c=getchar();
}
while(isdigit(c))
x=(x<<1)+(x<<3)+c-'0',c=getchar();
return x*f;
}
inline void print(int x)
{
if(x<0)
putchar('-'),x=-x;
if(x>9)
print(x/10);
putchar(x%10+'0');
}
const int MAXN=100001;
struct edge{
int dis,to,nxt;
}e[MAXN<<2];
int n,m,s,cnt,head[MAXN],dis[MAXN];
bool vis[MAXN];
struct node{
int pos,dis;
bool operator <( const node &x )const
{
return x.dis<dis;
}
};
priority_queue<node> q;
void add_edge(int u,int v,int d)
{
cnt++;
e[cnt].dis=d;
e[cnt].to=v;
e[cnt].nxt=head[u];
head[u]=cnt;
}
void dijkstra()
{
dis[s]=0;
q.push((node){0,s});
while(!q.empty())
{
node tmp=q.top();
q.pop();
int x=tmp.pos,d=tmp.dis;
if(vis[x])
continue;
vis[x]=1;
for(int i=head[x];i;i=e[i].nxt)
{
int y=e[i].to;
if(dis[y]>dis[x]+e[i].dis)
{
dis[y]=dis[x]+e[i].dis;
if(!vis[y])
q.push((node){dis[y],y});
}
}
}
}
int main()
{
// freopen("____.in","r",stdin);
// freopen("____.out","w",stdout);
n=read(),m=read(),s=read();
for(int i=1;i<=n;i++)
dis[i]=inf;
while(m--)
{
int u,v,d;
u=read(),v=read(),d=read();
add_edge(u,v,d);
}
for(int i=1;i<=n;i++)
printf("%d ",dis[i]);
return 0;
}
求大佬帮忙调错awa