以下为代码,求巨佬解答
#include<bits/stdc++.h>
using namespace std;
struct node
{
long long po;
long long dis;
bool operator < (const node &a)const
{
return dis>a.dis;
}
};
struct edge
{
long long to;
long long dis;
};
vector <edge> p[100005];
priority_queue <node> q;
long long n,m,s,dis[100005],used[100005];
int main()
{
cin>>n>>m>>s;
for(int i=1;i<=n;i++)
dis[i]=0x7fffffff;
for(int i=1;i<=m;i++)
{
edge a,b;
long long x,y,z;
cin>>x>>y>>z;
if(x==y)
continue;
a.to=y;
b.to=x;
a.dis=b.dis=z;
p[x].push_back(a);
p[y].push_back(b);
}
dis[s]=0;
q.push((node){s,0});
while(!q.empty())
{
node x=q.top();
q.pop();
if(used[x.po]==1)
continue;
used[x.po]=1;
for(int i=0;i<p[x.po].size();i++)
{
if(dis[p[x.po][i].to]>dis[x.po]+p[x.po][i].dis)
{
dis[p[x.po][i].to]=dis[x.po]+p[x.po][i].dis;
if(used[p[x.po][i].to]==0)
{
q.push((node){p[x.po][i].to,dis[p[x.po][i].to]});
}
}
}
}
for(int i=1;i<=n;i++)
cout<<dis[i]<<" ";
return 0;
}