10分求助,悬关
查看原帖
10分求助,悬关
704275
无名之雾楼主2024/5/4 14:15
#include<bits/stdc++.h>
using namespace std;
#define int long long
inline int read(){
   int s=0,w=1;
   char ch=getchar();
   while(ch<'0'||ch>'9'){if(ch=='-')w=-1;ch=getchar();}
   while(ch>='0'&&ch<='9') s=s*10+ch-'0',ch=getchar();
   return s*w;
}
inline void write(int x){
    if(x==0){putchar('0');return;}
	int len=0,k1=x,c[10005];
	if(k1<0)k1=-k1,putchar('-');
	while(k1)c[len++]=k1%10+'0',k1/=10;
	while(len--)putchar(c[len]);
}
const int N=2e5+5;
struct node{
	int w,v;
};
struct Node{
	int w,v;
	bool operator < (const Node &x) const{
		return x.v<=v;
	}
};
int dist[N],flag[N],dis2[N];
vector<node>edge[N];
priority_queue<Node>q;
void dijkstra(){
	while(!q.empty()){
		int ww=q.top().w,vv=q.top().v;q.pop();
		for(int i=0;i<edge[ww].size();i++){
			int w=edge[ww][i].w,v=edge[ww][i].v;
			if(v+vv<dist[w]){
				dis2[w]=dist[w];
				dist[w]=v+vv;
				q.push({w,dist[w]});
			}
			else if(v+vv<dis2[w]&&v+vv>dist[w]){
				dis2[w]=v+vv;
				q.push({w,dis2[w]});
			}
		}
	}
}
signed main(){
	int m=read(),n=read();
	for(int i=1;i<=m;i++){
		int a=read(),b=read(),c=read();
		edge[a].push_back({b,c});
		edge[b].push_back({a,c});
	} 
	for(int i=1;i<=n;i++)dist[i]=dis2[i]=INT_MAX;
	dist[1]=0;
	q.push({1,0});
	dijkstra();
	write(dis2[n]);
	return 0;
}
2024/5/4 14:15
加载中...