求助
查看原帖
求助
1277793
Gongyujie123楼主2025/1/5 19:52

WA #10

#include<bits/stdc++.h>
#define ll long long
#define set1(H) for(int i=0;i<=n;i++) a[i]=H;
using namespace std;
vector<pair<ll,ll> > vi[300005];
ll a[300005];
map<ll,ll> b;
ll n,m,s;
set<pair<ll,ll>> st;
ll INF=1e18;
ll find(){
	pair<ll,ll> g=*st.begin();
	return g.second;
}
int main(){
	std::ios::sync_with_stdio(false);
	std::cin.tie(0);
	std::cout.tie(0);
	cin>>n>>m;
	set1(INF);
	for(int i=0;i<m;i++){
		ll u,v,w;
		cin>>u>>v>>w;
		vi[u].push_back(pair<ll,ll>(v,w));
	}
	a[1]=0;
	st.insert(pair<ll,ll>(0,1));
	ll u=0;
	while(!st.empty()){
		u=find();
		if(b[u]>=1){
			st.erase(st.begin());
			continue;
		}
		b[u]=1;
		for(int i=0;i<vi[u].size();i++){
			ll o=vi[u][i].second;
			ll p=vi[u][i].first;
			if(a[u]+o<a[p]){
				a[p]=a[u]+o;
				st.insert(pair<ll,ll>(a[p],p));
			}
		}
	}
	for(int i=1;i<=n;i++){
		if(a[i]==INF){
			cout<<-1ll<<' ';
			continue;
		}
		cout<<a[i]<<' ';
	}
	return 0;
}

提交记录

2025/1/5 19:52
加载中...