This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
using namespace std;
#define db(...) " [" << #__VA_ARGS__ << " : " << (__VA_ARGS__) << "] "
#define N 200005
int n, m;
int a[N];
vector<int> g[N];
// nhan xet: bay len den 1 diem mid sau do di xuong
int up[N]; // bay len
int down[N]; // bay xuong
template<class A, class B>
bool mini(A &a, const B &b) {
return a > b ? (a = b), true : false;
}
void dijkstra(int src, int d[]) {
fill(d + 1, d + n + 1, 2e8);
d[src] = 0;
using T = pair<int, int>;
priority_queue<T, vector<T>, greater<T>> pq;
pq.emplace(0, src);
while (pq.size()) {
auto [c, u] = pq.top();
pq.pop();
if (c != d[u]) {
continue;
}
for (int v : g[u]) {
if (mini(d[v], max(d[u] + 1, a[v]))) {
pq.emplace(d[v], v);
}
}
}
}
signed main() {
ios::sync_with_stdio(false);
cin.tie(0);
cin >> n >> m;
for (int i = 1; i <= n; ++i) {
cin >> a[i];
}
for (int i = 1, u, v; i <= m; ++i) {
cin >> u >> v;
g[u].emplace_back(v);
g[v].emplace_back(u);
}
dijkstra(1, up);
dijkstra(n, down);
int res = 1e9;
for (int i = 1; i <= n; ++i) {
res = min(res, 2 * max(up[i], down[i]));
}
// giao nhau tai (u, v)
for (int u = 1; u <= n; ++u) {
for (int v : g[u]) {
res = min(res, 2 * max(up[u], down[v]) + 1);
}
}
cout << res;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |