제출 #1123159

#제출 시각아이디문제언어결과실행 시간메모리
1123159crafticatThe Xana coup (BOI21_xanadu)C++17
100 / 100
118 ms44872 KiB
#include <bits/stdc++.h>

using namespace std;
#define F0R(i, n) for (ll i = 0; i < n;i++)
#define FOR(i, j, n) for (ll i = j;i < n;i++)

using ll = long long;
template<typename T>
using V = vector<T>;
using vi = V<ll>;
constexpr ll INF = 1e9 + 7;
using pi = pair<ll,ll>;
using vvi = V<vi>;

vvi g;
V<vvi> dp;
vi state;

void solve(ll x, ll p) {
    vi child;
    for (auto y : g[x]) {
        if (y == p) continue;
        child.push_back(y);
        solve(y, x);
    }

    F0R(i, 2) {
        F0R(j, 2) {

            if (child.empty()) {
                dp[x][1][1] = 1;
                dp[x][0][0] = 0;
                continue;
            }
            ll best = INF;

            vi sDp(2, INF); sDp[0] = 0;

            for (auto y : child) {
                vi newDp(2, INF);
                F0R(k, 2) {
                    F0R(l, 2) {
                        newDp[k] = min(newDp[k], dp[y][(j + state[y]) % 2][l] + sDp[(k + l) % 2]);
                    }
                }
                sDp = newDp;
            }
            best = sDp[(i + j) % 2];

            dp[x][i][j] = best + j;
        }
    }
}

int main() {
    ios_base::sync_with_stdio(false); cin.tie(nullptr);

    ll n; cin >> n; g.resize(n + 1), state.resize(n + 1);
    F0R(i, n - 1) {
        ll a, b; cin >> a >> b;
        g[a].push_back(b);
        g[b].push_back(a);
    }
    F0R(i, n)
        cin >> state[i + 1];

    dp.resize(n + 1, vvi(2, vi(2, INF)));
    solve(1, -1);

    ll r =  min(dp[1][state[1]][0], dp[1][state[1]][1]);
    if (r >= INF) {
        cout << "impossible\n";
    } else
        cout << r;

    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...