30pts Dijkstra求调
查看原帖
30pts Dijkstra求调
1129166
wangzilong913楼主2024/7/23 14:46
#include <bits/stdc++.h>
using namespace std;
int n,m,s;
int dis[150005];
bool vis[150005];
vector<pair<int,int > > a[150005];
priority_queue<pair<int,int >,vector<pair<int,int > >,greater<pair<int,int > > > q;
int main(){
	memset(dis,0x3f,sizeof(dis));
	cin>>n>>m>>s;
	for(int i = 1;i <= m;i++){
		int x,y,z;
		cin>>x>>y>>z;
		a[x].push_back({y,z});
	}
	dis[s] = 0;
	q.push({0,s});
	for(int i = 1;i <= n;i++){
		int k = q.top().second;
		q.pop();
		if(vis[k] == true){
			continue;
		}
		vis[k] = true;
		for(int j = 0;j < a[k].size();j++){
			int y,z;
			y = a[k][j].first;
			z = a[k][j].second;
			if(dis[k] + z < dis[y]){
				dis[y] = dis[k] + z;
				q.push({dis[y],y});
			}
		}
	}
	for(int i = 1;i <= n;i++){
		if(dis[i] == 0x3f3f3f3f){
			cout<<INT_MAX<<" ";
		}
		else{
			cout<<dis[i]<<" ";
		}
	}
	
	return 0;
}
2024/7/23 14:46
加载中...