SPFA过了!!!
查看原帖
SPFA过了!!!
629342
xlaser楼主2024/8/9 20:06

RT.

代码:

#include <iostream>
#include <queue>
#include <vector>
using namespace std;

struct vw
{
	int v,w;
};

int n,m,s;
int dis[100010];
vector<vw> edge[100010];

void dijkstra(int s)
{
	for(int i=1;i<=n;i++)
	{
		dis[i]=1e9;
	}
	priority_queue<pair<int,int>,vector<pair<int,int>>,greater<pair<int,int>>> q;
	dis[s]=0;
	q.push({0,s});
	while(!q.empty())
	{
		auto tmp=q.top();
		q.pop();
		int jl=tmp.first;
		int mini=tmp.second;
		for (auto v : edge[mini])
		{
			if(dis[v.v]>jl+v.w)
			{
				dis[v.v]=jl+v.w;
				q.push({jl+v.w,v.v});
			}
		}
	}
}

int main()
{
	scanf("%d%d%d",&n,&m,&s);
	for(int i=1;i<=m;i++)
	{
		int u,v,w;
		scanf("%d%d%d", &u,&v,&w);
		edge[u].push_back({v,w});
	}
	dijkstra(1);
	for(int i=1;i<=n;i++)
	{
		printf("%d ", dis[i]);
	}
	return 0;
}

建议加强数据

2024/8/9 20:06
加载中...