제출 #1296672

#제출 시각아이디문제언어결과실행 시간메모리
1296672kawhietTeam Coding (EGOI24_teamcoding)C++20
35 / 100
334 ms11740 KiB
#include <bits/stdc++.h> using namespace std; #ifdef LOCAL #include "debug.h" #else #define dbg(...) 42 #endif const int N = 1e5; const int K = 1e5; vector<int> g[N]; int a[N], p[N], cnt[N]; int depth[N]; set<int> d[N]; void build(int u, int p, int lvl = 0) { depth[u] = lvl; d[lvl].insert(u); for (auto v : g[u]) { if (v == p) continue; build(v, u, lvl + 1); } } set<int> b; void dfs(int u, int p) { b.insert(u); for (auto v : g[u]) { if (v == p) continue; dfs(v, u); } } int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int n, k; cin >> n >> k; for (int i = 0; i < n; i++) { cin >> a[i]; cnt[a[i]]++; } p[0] = -1; for (int i = 1; i < n; i++) { cin >> p[i]; g[i].push_back(p[i]); g[p[i]].push_back(i); } if (n <= 2000) { build(0, -1); int mx = 1, mn = 0; for (int u = 0; u < n; u++) { b.clear(); dfs(u, p[u]); int res = 0, swp = 0; vector<int> c(n); for (int i = 0; i < n; i++) { for (auto v : d[i]) { if (!b.count(v) && a[v] == a[u]) c[i]++; } } vector<int> x(n), y(n); for (auto v : b) { if (a[u] == a[v]) { res++; x[depth[v]]++; } else { y[depth[v]]++; } } for (int i = depth[u] + 1; i < n; i++) { res += min(y[i], c[i]); swp += min(y[i], c[i]); } if (mx < res) { mx = res; mn = swp; } if (mx == res) { mn = min(mn, swp); } } cout << mx << ' ' << mn << '\n'; } else { int res = 0; for (int i = 0; i < N; i++) res = max(res, cnt[i]); cout << res << ' ' << 0 << '\n'; } 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...