52分求调
查看原帖
52分求调
726089
Ecesq_4楼主2024/7/23 10:51
#include<bits/stdc++.h>
using namespace std;
#define int long long
int n,m,s,k;
struct node1
{
	int head;
	int to;
	int next;
	int qw;
}e[800010];
int dis[200010];
bool vis[200010];
struct node
{
	int x;
	int qw;
	bool operator <(const node &x)const	
	{
		return x.qw<qw;
	}
};
void add(int x,int y,int qe)
{
	k++;
	e[k].qw=qe;
	e[k].to=y;
	e[k].next=e[x].head;
	e[x].head=k;
}
priority_queue<node> q;
signed main()
{
	cin>>n>>m>>s;
	for(int i=1;i<=m;i++)
	{
		int x,y,qe;
		cin>>x>>y>>qe;
		add(x,y,qe);
	}
	memset(dis,0x3f3f3f3f3f3f3f,sizeof(dis));
	dis[s]=0;
	vis[s]=1;
	q.push(node{s,0});
	while(!q.empty())
	{
		node w=q.top();
		q.pop();
		int xx=w.x;
		for(int i=e[xx].head;i;i=e[i].next)
		{
			int yy=e[i].to;
			if(dis[yy]>dis[xx]+e[i].qw)
			{
				dis[yy]=dis[xx]+e[i].qw;
				if(vis[yy]==0)
				{
					vis[yy]=1;
					q.push(node{yy,dis[yy]});
				}
			}
		}
	}
	for(int i=1;i<=n;i++)
	{
		cout<<dis[i]<<' ';
	}
	return 0;
}
2024/7/23 10:51
加载中...