50pts求调QAQ
查看原帖
50pts求调QAQ
811437
littlewhite_楼主2025/7/26 21:32
#include<bits/stdc++.h>
#define int long long
using namespace std;
#define N 200010
#define inf INT_MAX
int n,m,s,cnt,sedis[N],dis[N],head[N],to[N],val[N],nxt[N]; 
struct node{
    int v,w;
    friend bool operator < (node a,node b){
		return a.w>b.w;
	}
}tmp;
void add(int a,int b,int c){
    to[++cnt]=b;
    val[cnt]=c;
    nxt[cnt]=head[a];
    head[a]=cnt;
}
void Dijkstra(){
	priority_queue<node>q; 
    for(int i=1;i<=n;i++){
    	dis[i]=inf;
    	sedis[i]=inf;
	}
    dis[1]=0;
    tmp.v=1;
	tmp.w=0; 
	q.push(tmp);
    while(!q.empty()){
        int u=q.top().v,d=q.top().w;
        q.pop();
        if(d>dis[u]) continue; 
        for(int i=head[u];i;i=nxt[i]){
            if(dis[to[i]]>d+val[i]){
                sedis[to[i]]=dis[to[i]];
				dis[to[i]]=d+val[i];
                tmp.w=dis[to[i]];
				tmp.v=to[i]; 
				q.push(tmp);
            }
            if(sedis[to[i]]>d+val[i]&&dis[to[i]]<d+val[i]){
            	sedis[to[i]]=d+val[i];
            	tmp.w=sedis[to[i]];
				tmp.v=to[i]; 
				q.push(tmp);
			}
        }
    }
    return;
}
signed main(){
	ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
	cin>>n>>m;
	for(int i=1;i<=m;i++){
		int u,v,w;
		cin>>u>>v>>w;
		add(u,v,w);
		add(v,u,w);
	} 
	Dijkstra();
	cout<<sedis[n];
 	return 0;
}
2025/7/26 21:32
加载中...