# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
856607 | vjudge1 | Untitled (POI11_dyn) | C++17 | 433 ms | 21964 KiB |
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 <iostream>
#include <vector>
#include <algorithm>
#include <deque>
#include <set>
#include <utility>
#include <numeric>
#include <array>
#include <cstring>
using namespace std;
#define ALL(x) x.begin(), x.end()
using ll = long long;
#define N 300050
int n, m, d[N], f[N], h[N];
vector<int> g[N], dfn;
vector<int> rev_dfn(int src)
{
vector<int> st = {src}, V(n);
for (int i = 0; i < n; ++i)
{
auto u = st.back(); st.pop_back();
V[i] = u;
for (auto v : g[u])
{
g[v].erase(find(ALL(g[v]), u));
st.push_back(v);
}
}
reverse(ALL(V));
return V;
}
int ok(int y)
{
memset(f, -1, sizeof f);
memset(h, 63, sizeof h);
int k = m;
for (auto u : dfn)
{
for (auto v : g[u])
{
if (f[v] != -1) f[u] = max(f[u], f[v] + 1);
h[u] = min(h[u], h[v] + 1);
}
if (f[u] == -1 && d[u]) f[u] = 0;
if (f[u] == y)
{
if (!k--) return 0;
f[u] = -1; h[u] = 0;
} else if (f[u] + h[u] <= y)
f[u] = -1;
}
return k || f[0] == -1;
}
int main()
{
cin.tie(nullptr)->sync_with_stdio(false);
scanf("%d%d", &n, &m);
for (int i = 1; i <= n; ++i) scanf("%d", d+i);
if (accumulate(d, d+n+1, 0) <= m) return 0 * puts("0");
for (int u, v, i = 1; i < n; ++i)
scanf("%d%d", &u, &v), g[u].push_back(v), g[v].push_back(u);
dfn = rev_dfn(1);
int l = 1, r = 2*n-1, z = -1;
while (l < r)
{
int y = (l+r)/2;
ok(y) ? r = y : l = y + 1;
}
printf("%d", l);
return 0;
}
Compilation message (stderr)
# | 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... |
# | 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... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |