• 个人简介

    #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