30玄关
查看原帖
30玄关
766880
jingliang_youxi楼主2024/10/16 15:04
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N = 1e4 + 5;

struct node {
	int v, w;
};
int a[N], dis[N], book[N], n, m, b;
vector<node>e[N];

int dij(int x) {
	memset(book, 0x3f, sizeof(book));
	priority_queue<pair<int, int>>q;
	q.push({0, 1});
	memset(dis, 0x3f, sizeof(dis));
	dis[1] = 0;
	while (!q.empty()) {
		int tmp = q.top().second;
		q.pop();
		if (book[tmp])
			continue;
		book[tmp] = 1;
		for (int i = 0; i < e[tmp].size(); i++) {
			int v = e[tmp][i].v;
			int w = e[tmp][i].w;
			if (dis[v] > dis[tmp] + w && x >= a[v]) {
				dis[v] = dis[tmp] + w;
				q.push({-dis[v], v});
			}
		}
	}
	return dis[n] <= b;
}

signed main() {
	cin >> n >> m >> b;
	for (int i = 1; i <= n; i++)
		cin >> a[i];
	for (int i = 1; i <= m; i++) {
		int x, y, z;
		cin >> x >> y >> z;
		e[x].push_back({y, z});
		e[x].push_back({x, z});
	}
	int l = a[1], r = 1e9;
	int ans = -1;
	while (l <= r) {
		int mid = (l + r) >> 1;
		if (dij(mid)) {
			ans = mid;
			r = mid - 1;
		} else {
			l = mid + 1;
		}
	}
	if (ans == -1)
		cout << "AFK" << endl;
	else
		cout << ans << endl;
	return 0;
}

2024/10/16 15:04
加载中...