-
个人简介
#include<bits/stdc++.h> using namespace std;
const int N= 1e5 + 5; const int INF = 0x3f3f3f3f; int n,m,b; int a[N]; int u,v,w; int l,r; vector<pair<int,int> > vc[N]; int dis[N]; bool vis[N]; int ans = INF; bool check(int mid){ memset(dis,INF,sizeof(dis)); memset(vis , 0 , sizeof(vis)); dis[1] = 0; priority_queue<pair<int,int> > q; q.push({0,1}); while(!q.empty()){ pair<int,int> top = q.top(); q.pop(); int minid = top.second; if(vis[minid]) continue; vis[minid] = 1; for(int i = 0; i < vc[minid].size() ;i++){ int to = vc[minid][i].first,w = vc[minid][i].second; if(a[to] > mid) continue; if(dis [to] > dis[minid] + w){ dis[to] = dis[minid] + w; if(!vis[to]){ q.push({-dis[to],to}); } } } } return dis[n] <= b; }
signed main(){ cin>>n>>m>>b; for(int i = 1; i <= n; i++){ cin>>a[i]; r = max(r,a[i]); } l = max(a[1],a[n]);
while(m--){ cin>>u>>v>>w; vc[u].push_back({v,w}); vc[v].push_back({u,w}); } while(l <= r){ int mid = l + r >> 1; if(check(mid)){ ans = mid; r = mid - 1; } else{ l = mid + 1; } } if(ans == INF){ cout << "AFK\n"; } else{ cout<<ans; } return 0;}
-
通过的题目
-
最近活动
-
最近编写的题解
This person is lazy and didn't write any solutions.
题目标签
- 模拟
- 1
- 语言基础
- 1
- 基础语法
- 1