求助,只有52分,可过样例
查看原帖
求助,只有52分,可过样例
384558
盯__裆__猫楼主2021/11/15 23:07

以下为代码,求巨佬解答

#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;
}
2021/11/15 23:07
加载中...