Submission #1220908

#TimeUsernameProblemLanguageResultExecution timeMemory
1220908overwatch9Team Coding (EGOI24_teamcoding)C++20
0 / 100
37 ms17584 KiB
// subtask 2
#include <bits/stdc++.h>
using namespace std;
const int maxn = 2e5 + 1;
int col[maxn];
vector <int> adj[maxn];
int grps[maxn][2];
int depth[maxn];
void dfs(int s, int d) {
    grps[d][col[s]]++;
    depth[s] = d;
    for (auto i : adj[s]) {
        dfs(i, d+1);
    }
}
pair <int, int> ans;
pair <int, int> dp[maxn][2];
bool ready[maxn][2];
pair <int, int> get_best(pair <int, int> a, pair <int, int> b) {
    if (a.first > b.first)
        return a;
    if (b.first > a.first)
        return b;
    if (a.second < b.second)
        return a;
    return b;
}
pair <int, int> dfs2(int s, int c, int d) {
    pair <int, int> res = {0, 0};
    if (col[s] == c)
        res.first++;
    else if (grps[d][c] > 0) {
        res.first++;
        grps[d][c]--;
        grps[d][1-c]++;
        res.second++;
    }
    for (auto i : adj[s]) {
        auto res2 = dfs2(i, c, d+1);
        res.first += res2.first;
        res.second += res2.second;
    }
    if (col[s] == c)
        ;
    else if (grps[d][c] > 0) {
        // res.first++;
        grps[d][c]++;
        grps[d][1-c]--;
        // res.second++;
    }
    return res;
}
int main() {
    int n, k;
    cin >> n >> k;
    for (int i = 0; i < n; i++)
        cin >> col[i];
    for (int i = 1; i < n; i++) {
        int p;
        cin >> p;
        adj[p].push_back(i);
    }
    dfs(0, 0);
    for (int i = 0; i < n; i++) {
        if (col[i] == col[0])
            ans.first++;
    }
    for (auto i : adj[0]) {
        ans = get_best(ans, dfs2(i, col[i], 1));
    }
    cout << ans.first << ' ' << ans.second << '\n';
}
#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...