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]; }


浙公网安备 33010602011771号