dijkstraT最后一个点,求调
查看原帖
dijkstraT最后一个点,求调
868110
GGmaxgch楼主2025/1/16 17:10
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
struct edge{
	int cost, to;
};
int dis1[N],dis2[N];
vector<edge> g[N];
priority_queue<pair<int,int> >q;
int n,m;
void dij(int s){
	memset(dis2,0x3f,sizeof(dis2));
	memset(dis1,0x3f,sizeof(dis1));
	dis1[1]=0;
	q.push({0,1});
	while(!q.empty()){
		auto t=q.top();
		q.pop();
		int u=t.second;
		for(auto c:g[u]){
			int v=c.to,len=c.cost,f=0;
			if(dis1[v]>dis1[u]+len) dis2[v]=dis1[v],dis1[v]=dis1[u]+len,f=1;
			if(dis1[v]<dis1[u]+len&&dis1[u]+len<dis2[v]) dis2[v]=dis1[u]+len,f=1;
			if(dis2[v]>dis2[u]+len) dis2[v]=dis2[u]+len,f=1;
			if(f) q.push({dis1[v],v});}}
}
int main(){
	cin>>n>>m;
	for(int i=1;i<=m;i++){
		int x,y,c;
		cin>>x>>y>>c;
		g[x].push_back({c,y});
		g[y].push_back({c,x});}
	dij(1);
	cout<<dis2[n];
	return 0;
}
2025/1/16 17:10
加载中...