Submission #1269433

#TimeUsernameProblemLanguageResultExecution timeMemory
1269433MateiKing80JOI tour (JOI24_joitour)C++20
20 / 100
3065 ms42548 KiB
#include <bits/stdc++.h> #include "joitour.h" using namespace std; using ll = long long; #define int ll const int N = 200005, B = 19; int n; vector<int> vec[N]; int tip[N], subInit[3][N], stot[3]; int inNod[N], ans = 0; void dfs(int nod, int papa) { subInit[0][nod] = subInit[1][nod] = subInit[2][nod] = 0; inNod[nod] = 0; for (auto i : vec[nod]) { if (i == papa) continue; dfs(i, nod); inNod[nod] += subInit[0][nod] * subInit[2][i]; inNod[nod] += subInit[2][nod] * subInit[0][i]; subInit[0][nod] += subInit[0][i]; subInit[1][nod] += subInit[1][i]; subInit[2][nod] += subInit[2][i]; } subInit[tip[nod]][nod] ++; inNod[nod] += subInit[0][nod] * (stot[2] - subInit[2][nod]); inNod[nod] += subInit[2][nod] * (stot[0] - subInit[0][nod]); } void init(signed _N, vector<signed> F, vector<signed> U, vector<signed> V, signed Q) { n = _N; for (int i = 0; i < n; i ++) { tip[i] = F[i]; stot[tip[i]] ++; } for (int i = 0; i < n - 1; i ++) { vec[V[i]].push_back(U[i]); vec[U[i]].push_back(V[i]); } dfs(0, -1); for (int i = 0; i < n; i ++) ans += (tip[i] == 1) * inNod[i]; } void change(signed x, signed y) { stot[tip[x]] --; tip[x] = y; stot[tip[x]] ++; dfs(0, -1); ans = 0; for (int i = 0; i < n; i ++) ans += (tip[i] == 1) * inNod[i]; } int num_tours() { return ans; }
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...