为何Subtask #0全RE
查看原帖
为何Subtask #0全RE
1299558
plk5418楼主2025/6/16 14:10
#include<bits/stdc++.h>
using namespace std;
const long long inf = LLONG_MAX / 3;
int to[500007], head[100007], _next[500007], ans = 0, tot = 0, b, n, m;
int vis[100007];
long long d[100007];
int edge[500007], a[100007], l = 1e9 + 7, r = 0;
priority_queue<pair<int, int> >q;
void add(int x, int y, long long z){
	to[++tot] = y;
	edge[tot] = z;
	_next[tot] = head[x];
	head[x] = tot;
}
void dijkstra(int s){
	for(int i = 0; i <= n; i++){
		d[i] = inf;
		vis[i] = 0;
	}
	while(!q.empty()) q.pop();
	d[s] = 0;
	q.push({0, s});
	while(q.size()){
		int u = q.top().second;
		q.pop();
		if(vis[u])continue;
		vis[u] = 1;
		for(int i = head[u]; i; i = _next[i]){
			int v = to[i], w = edge[i];
			if(d[v] > d[u] + w){
				d[v] = d[u] + w;
				q.push({-d[v], v});
			}
		}
	}
}
int 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]);
	for(int i = 1; i <= m; i++){
		int x, y;
		long long z;
		cin >> x >> y >> z;
		add(x, y, z);
		add(y, x, z);
	}
	while(l < r){
		int mid = (l + r) >> 1;
		dijkstra(mid);
		if(d[n] > b)l = mid + 1;
		else r = mid;
	}
	dijkstra(l);
	if(d[l] <= b)cout << l;
	else cout << "AFK";
	return 0;
}
2025/6/16 14:10
加载中...