dij求助!
查看原帖
dij求助!
535996
Blanc_min楼主2023/6/17 11:35
#include<bits/stdc++.h>
using namespace std;
#define ll long long
ll s,n,m,dis[100005],bj[100005],tot[100005];
vector<ll> son[100005];
vector<ll> sonw[100005];
priority_queue<pair<ll,ll> >q;
void dij(ll x) {
	memset(bj,0,sizeof(bj));
	for(ll i=1;i<=n;i++) dis[i]=LONG_LONG_MAX;
	dis[x]=0;
	q.push(make_pair(-dis[x],x));
	while(!q.empty()) {
		x=q.top().second;
		q.pop();
		if(bj[x]) continue;
		bj[x]=1;
		for(ll i=0;i<tot[x];i++) {
			ll y=son[x][i];
			if(bj[y]==0&&dis[y]>dis[x]+sonw[x][i]) {
				dis[y]=dis[x]+sonw[x][i];
				q.push(make_pair(-dis[y],y));
			}
		}
	}
}
int main() {
	cin>>n>>m>>s;
	for(ll i=1;i<=n;i++) {
		ll x,y,w;
		cin>>x>>y>>w;
		son[x].push_back(y);
		sonw[x].push_back(w);
		tot[x]++;
	}
	dij(s);
	for(ll i=1;i<=n;i++) cout<<dis[i]<<' ';
	return 0;
}
2023/6/17 11:35
加载中...