模板题,求调,玄关
查看原帖
模板题,求调,玄关
654577
RainySoul楼主2023/10/19 13:41
#include<bits/stdc++.h>
#define inf 2147483647
using namespace std;
struct csq{
	int loc,num;
	friend bool operator <(csq a,csq b){a.num>b.num;};
};
struct node{int to,w;};
priority_queue<csq> q;
vector<node> e[100010];
int n,m,s,dis[100010],vis[100010]; 
void dijkstra(){
	for(int i=1;i<=n;i++)dis[i]=inf;
	dis[s]=0;
	q.push((csq){s,0});
	while(!q.empty()){
		int u=q.top().loc;
		q.pop();
		if(vis[u])continue;
		vis[u]=1;
		for(int i=0;i<e[u].size();i++){
			node t=e[u][i];
			if(dis[t.to]>dis[u]+t.w){
				dis[t.to]=dis[u]+t.w;
				if(!vis[t.to])q.push((csq){t.to,dis[t.to]});
			}
		}
	}
}
int main(){
	cin>>n>>m>>s;
	for(int i=1;i<=m;i++){
		int u,v,w;
		scanf("%d%d%d",&u,&v,&w);
		e[u].push_back((node){v,w});
	}
	dijkstra();
	for(int i=1;i<=n;i++)cout<<dis[i]<<" ";
	return 0;
}
2023/10/19 13:41
加载中...