csp201703-4

题目:计算机软件能力认证考试系统

这题使用dijkstra就能过,虽然慢点。

把松弛条件换成dis[j]>max(dis[i],c)即可

#include<bits/stdc++.h>
#define inf 99999999
#define pa pair<int,int>
using namespace std;
vector<pa>G[100005];
int dis[100005];
int vis[100005];
int n,m;
void dijkstra(){
    for(int i=1;i<=n;i++){dis[i]=inf;vis[i]=0;}
    priority_queue<pa,vector<pa>,greater<pa> >q;
    dis[1]=0;
    q.push({0,1});
    while(!q.empty()){
        int now=q.top().second;q.pop();
        if(vis[now])continue;
        vis[now]=1;
        for(int i=0;i<G[now].size();i++){
            if(dis[G[now][i].first]>max(dis[now],G[now][i].second)){
                dis[G[now][i].first]=max(dis[now],G[now][i].second);
                q.push({dis[G[now][i].first],G[now][i].first});
            }
        }
    }
}
int main(){
    cin>>n>>m;
    for(int i=1;i<=m;i++){
        int a,b,c;
        scanf("%d%d%d",&a,&b,&c);
        G[a].push_back({b,c});
        G[b].push_back({a,c});
    }
    dijkstra();
    cout<<dis[n];
}

 

posted @ 2023-03-10 20:46  头像是睿智  阅读(26)  评论(0)    收藏  举报