52分求条,改对闭关
查看原帖
52分求条,改对闭关
1708023
LIANGMINGY楼主2025/8/5 09:58
#include<iostream>
#include<queue>
using namespace std;
struct t{
	int dis,u;
	bool operator>(const t& a)const{return dis > a.dis;}
};
struct p{
	int r,e;
};
bool b[200001];
vector<p>w[200001];
int n,x,y,tt,m,d[200001],s;
int main(){
	priority_queue<t,vector<t>,greater<t>>mi;
	cin>>n>>m>>s;
	for(int i=1;i<=m;i++){
		cin>>x>>y>>tt;
		w[x].push_back({y,tt});
		w[y].push_back({x,tt});
	}
	for(int i=1;i<=n;i++)d[i]=1e9;
	d[s]=0;
	mi.push({0,s});
	while(!mi.empty()){
		int u=mi.top().u;
		mi.pop();
		if(b[u])continue;
		b[u]=1;
		int sum=w[u].size();
		for(int i=0;i<sum;i++){
			int uu=w[u][i].r;
			if(d[u]+w[u][i].e<d[uu])
			d[uu]=d[u]+w[u][i].e,mi.push({d[uu],uu}); 
		}
	}
	for(int i=1;i<=n;i++)
	cout<<d[i]<<" ";
}
2025/8/5 09:58
加载中...