Submission #1189788

#TimeUsernameProblemLanguageResultExecution timeMemory
1189788NomioTeam Coding (EGOI24_teamcoding)C++20
35 / 100
4091 ms1114112 KiB
#include<bits/stdc++.h> using namespace std; const int maxn = 1e5 + 5; using ll = long long; vector<int> adj[maxn], dis(maxn, 1e6), a(maxn), c(maxn), b(maxn), in(maxn), out(maxn), lvl[maxn]; int H = 0; int timer = -1; void euler(int u) { timer++; in[u] = timer; a[timer] = u; lvl[dis[u]].push_back(in[u]); for(int v : adj[u]) { dis[v] = dis[u] + 1; H = max(H, dis[v]); euler(v); } out[u] = timer; } int main() { ios::sync_with_stdio(0); cin.tie(0); int n, k; cin >> n >> k; bool w = 1; for(int i = 0; i < n; i++) { cin >> c[i]; } for(int i = 1; i < n; i++) { cin >> b[i]; adj[b[i]].push_back(i); if(b[i] != i - 1) w = 0; } if(w) { int mx = 0; int cnt[k + 1] {}; for(int i = n - 1; i >= 0; i--) { cnt[c[i]]++; mx = max(mx, cnt[c[i]]); } cout << mx << ' ' << 0 << '\n'; } else { dis[0] = 0; lvl[0].push_back(0); euler(0); vector<int> cnt[H + 1][k + 1]; for(int i = 1; i <= H; i++) { for(int x : lvl[i]) { cnt[i][c[a[x]]].push_back(x); } } int mx = 1, sw = 0; for(int i = 0; i < n; i++) { int l = dis[i]; int mxx = 1, swp = 0; for(int j = l + 1; j <= H; j++) { int x = lower_bound(lvl[j].begin(), lvl[j].end(), in[i]) - lvl[j].begin(); int y = upper_bound(lvl[j].begin(), lvl[j].end(), out[i]) - lvl[j].begin() - 1; int mn = min((int)cnt[j][c[i]].size(), y - x + 1); x = lower_bound(cnt[j][c[i]].begin(), cnt[j][c[i]].end(), in[i]) - cnt[j][c[i]].begin(); y = upper_bound(cnt[j][c[i]].begin(), cnt[j][c[i]].end(), out[i]) - cnt[j][c[i]].begin() - 1; mxx += mn; swp += (mn - (y - x + 1)); } if(mxx > mx) { mx = mxx; sw = swp; } else if(mxx == mx) sw = min(sw, swp); } cout << mx << ' ' << sw << '\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...