90分dij求调
查看原帖
90分dij求调
971585
ruige233楼主2024/8/20 21:35

90分求调

#include <bits/stdc++.h>
#define pii pair<int,int>
using namespace std;
int n,m,s;
vector<pii> a[10005];
int dist[10005],dist2[10005];
void bfs(){
	memset(dist,0x3f,sizeof(dist));
	dist[s]=0;
	priority_queue<pii,vector<pii>,greater<pii> > que;
	que.push(make_pair(0,s));
	while(que.size()){
		auto f=que.top();
		que.pop();
		if(f.first>dist2[f.second]) continue;
		for(auto i:a[f.second]){
			if(f.first+i.second<dist[i.first]){
				dist2[i.first]=dist[i.first];
				dist[i.first]=f.first+i.second;
				que.push(make_pair(dist[i.first],i.first));
			}
			if(f.first+i.second<dist2[i.first] && f.first+i.second>dist[i.first]){
				dist2[i.first]=f.first+i.second;
				que.push(make_pair(dist2[i.first],i.first));
			}
		}
	}
}
int main(){
	s=1;
	cin>>n>>m;
	for(int i=1;i<=m;i++){
		int x,y,z;
		cin>>x>>y>>z;
		a[x].push_back(make_pair(y,z));
		a[y].push_back(make_pair(x,z));
	}
	bfs();
	cout<<dist2[n];
	return 0;
}
2024/8/20 21:35
加载中...