52pts求调
查看原帖
52pts求调
1033940
daniel_100111楼主2024/1/26 22:57
#include<bits/stdc++.h>
using namespace std;
const int N=100009;
const int M=200009;
const int INF=1e9+1; 
int n,m,s;
int d[N],ok[N];
vector<int> to[N],w[N];
struct node
{
	int dst,num;
	bool operator < (const node &a)const
	{
		return a.dst<dst;
	}
};
priority_queue<node> q; //
void Dijkstra()
{
	fill(d+1,d+n+2,INF);
	fill(ok+1,ok+n+2,0);
	d[s]=0;
	q.push((node){0,s});
	while(!q.empty())
	{
		node tmp=q.top();
		q.pop();
		int u=tmp.num;
		if(ok[u]) continue;
		ok[u]=1;
		for(int i=0;i<to[u].size();i++)
		{
			int v=to[u][i];
			int cost=w[u][i];
			if(d[v]>d[u]+cost)
			{
				d[v]=d[u]+cost;
				if(!ok[v]) q.push((node){d[v],v});
			}
		}
	}
}
int main()
{
	cin>>n>>m>>s;
	for(int i=1;i<=m;i++)
	{
		int u,v,t;
		cin>>u>>v>>t;
		to[u].push_back(v);
		to[v].push_back(u);
		w[u].push_back(t);
		w[v].push_back(t);
	}
	Dijkstra();
	for(int i=1;i<=n;i++) cout<<d[i]<<" ";
	return 0;
}
2024/1/26 22:57
加载中...