Submission #1154172

#TimeUsernameProblemLanguageResultExecution timeMemory
1154172pokmui9909Capital City (JOI20_capital_city)C++17
Compilation error
0 ms0 KiB
#include <bits/stdc++.h>
using namespace std;
using ll = long long;

#define x first
#define y second

ll N, K, A[200005], Tot[200005], S[200005], vis[200005];
vector<ll> T[200005];

ll Size(ll u, ll p){
    S[u] = 1;
    for(auto v : T[u]){
        if(v != p && !vis[v]) S[u] += Size(v, u);
    }
    return S[u];
}
ll Cent(ll u, ll p, ll n){
    for(auto v : T[u]){
        if(v != p && !vis[v] && S[v] > n / 2) return Cent(v, u, n);
    }
    return u;
}

ll Par[200005], chk[200005], Ans = 1e18;
vector<ll> U[200005];

void dfs(ll u, ll p, vector<ll> &V, vector<ll> &Del){
    Par[u] = p;
    V.push_back(A[u]); Del.push_back(u);
    U[A[u]].push_back(u);
    for(auto v : T[u]){
        if(v == p || vis[v]) continue;
        dfs(v, u, V, Del);
    }
}

void dnc(ll _u){
    ll u = Cent(_u, -1, Size(_u, -1));
    vis[u] = 1;
    vector<ll> V, Del;
    dfs(u, u, V, Del);
    sort(V.begin(), V.end());
    V.erase(unique(V.begin(), V.end()), V.end());
    ll ok = 1;
    for(auto e : V){
        if(U[e].size() != Tot[e]){
            ok = 0; break;
        }
    }
    if(ok){
        queue<ll> Q;
        ll c = 0;
        for(auto i : U[A[u]]){
            chk[i] = 1; Q.push(i);
        }
        while(!Q.empty()){
            ll k = Q.front(); Q.pop();
            if(k == u) continue;
            k = Par[k];
            if(chk[k] || U[A[k]].empty()) continue;
            for(auto i : U[A[k]]){
                f = 1, chk[i] = 1;
                Q.push(i); 
            }
            U[A[k]].clear();
            c += f;
            chk[k] = 1;
            Q.push(k);
        }
        Ans = min(Ans, c);
    }
    for(auto i : Del){
        chk[i] = 0; U[A[i]].clear();
    }
    for(auto v : T[u]){
        if(!vis[v]) dnc(v);
    }
}

int main(){
    cin.tie(0) -> sync_with_stdio(0);

    cin >> N >> K;
    for(ll i = 1; i < N; i++){
        ll u, v; cin >> u >> v;
        T[u].push_back(v); T[v].push_back(u);
    }
    for(ll i = 1; i <= N; i++){
        cin >> A[i];
        Tot[A[i]]++;
    }
    dnc(1);
    cout << Ans;
}

Compilation message (stderr)

capital_city.cpp: In function 'void dnc(ll)':
capital_city.cpp:63:17: error: 'f' was not declared in this scope
   63 |                 f = 1, chk[i] = 1;
      |                 ^
capital_city.cpp:67:18: error: 'f' was not declared in this scope
   67 |             c += f;
      |                  ^