#include <bits/stdc++.h>
using namespace std;
using ll = long long;
ll const INF = 1e9;
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
int n;
cin >> n;
vector<vector<int>> g(n+1);
for (int i = 0; i < n-1; i++)
{
int a, b;
cin >> a >> b;
g[a].push_back(b);
g[b].push_back(a);
}
vector<bool> on(n+1);
for (int i = 1; i <= n; i++)
{
int on_i;
cin >> on_i;
on[i] = on_i;
}
// dp[v][a][b] - zakladajac, ze wierzcholek v jest a i zosatal nacisniety jesli b
vector<vector<vector<ll>>> dp(n+1, vector<vector<ll>>(2, vector<ll>(2)));
function<void(int, int)> dfs = [&](int u, int p) -> void
{
int children = 0;
for (auto v : g[u])
{
if (v == p)
continue;
dfs(v, u);
children++;
}
if (!children)
{
dp[u][0][0] = 0;
dp[u][0][1] = INF;
dp[u][1][0] = INF;
dp[u][1][1] = 1;
return;
}
vector<pair<bool, bool>> pos = {{false, false}, {false, true}, {true, false}, {true, true}};
for (auto[a, b] : pos)
{
ll res = b;
int pressed = b;
for (auto v : g[u])
{
if (v == p)
continue;
if (dp[v][on[v] != b][1] < dp[v][on[v] != b][0])
{
res += dp[v][on[v] != b][1];
pressed++;
}
else
res += dp[v][on[v] != b][0];
}
if (res < INF && pressed % 2 != a)
{
bool all_inf = true;
for (auto v : g[u])
{
if (v == p)
continue;
if (dp[v][on[v] != b][0] != INF && dp[v][on[v] != b][1] != INF)
all_inf = false;
}
if (all_inf)
res = INF;
ll min_dif = INF;
for (auto v : g[u])
{
if (v == p)
continue;
min_dif = min(min_dif, abs(dp[v][on[v] != b][1] - dp[v][on[v] != b][0]));
}
res += min_dif;
}
dp[u][a][b] = min(res, INF);
}
};
dfs(1, 0);
ll ans = min(dp[1][on[1]][0], dp[1][on[1]][1]);
if (ans >= INF)
cout << "impossible";
else
cout << ans;
}
| # | 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... |