求助P1462
查看原帖
求助P1462
194756
dino楼主2023/2/23 12:53
#include<bits/stdc++.h>
using namespace std;
int const N = 1e4 + 5;
long long const MAX = 1e9;
int n, m, b;
vector<pair<long long, long long> > a[N];
long long dis[N];
bool vis[N];
long long s[N];

bool dijkstra(long long y){
	if(y < s[1]) return 0;
	for(int i = 1; i <= n; i++) dis[i] = MAX;
	dis[1] = 0;
	for(int i = 1; i <= n; i++) vis[i] = 0;
	priority_queue<pair<long long,long long>,vector<pair<long long,long long> >,greater<pair<long long,long long> > > q;
	q.push(make_pair(0, 1));
	while(!q.empty()){
		long long x = q.top().second;
		q.pop();
		if(vis[x]) continue;
		vis[x] = 1;
		for(int i = 0; i < a[x].size(); i++)
		{
			long long u = a[x][i].first, v = a[x][i].second;
			if(s[i] <= y && (dis[u] > dis[x] + v) && vis[u] == 0)
			{
				dis[u] = dis[x] + v;
				q.push(make_pair(dis[u], u));
			}
		}
	}
	cout << dis[n];
	if(dis[n] < b)
		return 1;
	return 0;
}

int main(){
	cin >> n >> m >> b;
	for(int i = 1; i <= n; i++) cin >> s[i];
	for(int i = 1; i <= m; i++){
		int t, u, v;
		cin >> t >> u >> v;
		a[t].push_back(make_pair(u, v));
		a[u].push_back(make_pair(t, v));
	}
	long long l = 1, r = MAX;
	if(dijkstra(MAX) == 0){
		cout << "AFK";
		return 0;
	}
	while(l <= r){
		long long mid = (l + r) / 2;
		if(dijkstra(mid))
			r = mid - 1;
		else
			l = mid + 1; 
	} 
	cout << l;
	return 0;
}
2023/2/23 12:53
加载中...