用的迪杰斯特拉过不去qwq
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int const N=1e4+10;
int const M=5e5+10;
int const INF=(1ll<<31)-1;
int head[M];
ll dix[N];
int tot=0;
int vis[N];
int n,m,s;
struct Edge{
int to,d,nxt;
}edge[M];
void add(int u,int v,int w)
{
edge[tot].to=v;
edge[tot].d=w;
edge[tot].nxt=head[tot];
head[u]=tot++;
}
void dij()
{
for(int i=1;i<=n;i++)
{
dix[i]=INF;
}
dix[s]=0;
int x;
memset(vis,0,sizeof(vis));
for(int i=1;i<=n;i++)
{
x=0;
for(int j=1;j<=n;j++)
{
if(!vis[x]&&(x==0||dix[j]<dix[x]))
{
x=j;
}
}
vis[x]=1;
for(int j=head[x];j!=-1;j=edge[j].nxt)
{
int v=edge[j].to;
dix[v]=min(dix[v],1ll*edge[j].d+dix[x]);
}
}
}
int main()
{
scanf("%d%d%d",&n,&m,&s);
int u,v,w;
memset(head,-1,sizeof(head));
while(m--)
{
scanf("%d%d%d",&u,&v,&w);
add(u,v,w);
}
dij();
for(int i=1;i<n;i++)
printf("%lld ",dix[i]);
printf("%lld\n",dix[n]);
return 0;
}
哪位大佬帮忙看一下,感谢