社区讨论

50分,做了一天了,不会了qwq

P2865[USACO06NOV] Roadblocks G参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@lo962szg
此快照首次捕获于
2023/10/28 06:10
2 年前
此快照最后确认于
2023/10/28 06:10
2 年前
查看原帖
CPP
#include<bits/stdc++.h>
using namespace std;
const int N=1000010,M=200000+10;
struct Edge{
    int v,w,nxt;
}e[M];
int head[N];
int n,m,s,cnt;
priority_queue<pair<int,int>,vector<pair<int,int> >,greater<pair<int,int> > > Q;
int dis[N],dis2[N];
void addEdge(int u,int v,int w) {
    e[++cnt]=(Edge){v,w,head[u]},head[u]=cnt;
}
void dijkstra(){
    memset(dis,0x3f,sizeof dis);
    dis[s]=0;
    Q.push(make_pair(0,s));
    while(!Q.empty()){
        int d=Q.top().first;
        int u=Q.top().second;
        Q.pop();
        if(d!=dis[u]) continue;
        for(int i=head[u];i;i=e[i].nxt){
            int v=e[i].v,w=e[i].w;
            if(dis[u]+w<dis[v]){
            dis2[v]=dis[v];
            dis[v]=dis[u]+w,Q.push(make_pair(dis[v],v));
        }
        else if(dis[u]+w<dis2[v]) dis2[v]=dis[u]+w;
        }
    }
}
int main(){
    cin>>n>>m;
    s=1;
    for(int i=1;i<=m;i++){
        int u,v,w;
        cin>>u>>v>>w;
        addEdge(u,v,w);
        addEdge(v,u,w);
    }
    dijkstra();
    printf("%d",dis2[n]);

    return 0;
}

回复

0 条回复,欢迎继续交流。

正在加载回复...