#include<bits/stdc++.h>
using namespace std;
bool vi[1000001];
bool ca;
int n,m,st,head[1000001],cnt=1,dis[1000001],p;
struct Edge
{
int next,to,w;
}edge[1000001];
int s[1000001],e[1000001],l[1000001];
void add(int fr,int to,int x)
{
edge[1].next=0;
edge[cnt].w=x;
edge[cnt].to=to;
edge[cnt].next=head[fr];
head[fr]=cnt++;
}
int main()
{
int i;
cin>>n>>m>>st;
head[1]=st;
for (i=1;i<=m;i++)
{
cin>>s[i]>>e[i]>>l[i];
add(s[i],e[i],l[i]);
}
for (i=1;i<=n;i++)
{
dis[i]=2147483647;
}
dis[st]=0;
p=st;
while (vi[p]==0)
{
int c=2147483647;
vi[p]=1;
for (i=head[p];i!=0;i=edge[i].next)
{
if (vi[edge[i].to]==0&&dis[edge[i].to]>dis[p]+edge[i].w)
{
dis[edge[i].to]=dis[p]+edge[i].w;
}
}
for (i=1;i<=m;i++)
{
if(dis[i]<c&&vi[i]==0)
{
c=dis[i];
p=i;
}
}
}
for (i=1;i<=n;i++)
{
if (dis[i]==0&&i!=st)ca=1;
}
if (ca!=1)
{
for (i=1;i<=n;i++)
{
cout<<dis[i]<<" ";
}
}
else cout<<"2147483647";
return 0;
}
都改的六亲不认了,马上越看越像题解还是4个a6个t,我都看不出来和题解有什么区别了,干脆我把题解交上去看看会不会t。 要么就是数据加强和有重边的问题,那么建议题解更新一下。