Submission #253601

#TimeUsernameProblemLanguageResultExecution timeMemory
253601IgorICats or Dogs (JOI18_catdog)C++17
0 / 100
7 ms12032 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; const int INF = 1e9; int n; vector<int> graph[500000]; int x[500000]; pair<int, int> calc(int v, int p) { pair<int, int> ans0 = {0, 0}; for (auto u : graph[v]) if (u != p) { pair<int, int> ans1 = calc(u, v); ans0.first += min(ans1.first, ans1.second + 1); ans0.second += min(ans1.first + 1, ans1.second); } if (x[v] == 0) ans0.second = INF; if (x[v] == 1) ans0.first = INF; return ans0; } void initialize(int n0, vector<int> a, vector<int> b) { n = n0; for (int i = 0; i < n - 1; i++) { graph[a[i]].push_back(b[i]); graph[b[i]].push_back(a[i]); } for (int i = 0; i < n; i++) { x[i] = -1; } } int cat(int v) { x[v] = 0; return min(calc(0, 0).first, calc(0, 0).second); } int dog(int v) { x[v] = 1; return min(calc(0, 0).first, calc(0, 0).second); } int neighbor(int v) { x[v] = -1; return min(calc(0, 0).first, calc(0, 0).second); } #ifdef LOCAL int main() { int n; cin >> n; vector<int> a(n - 1), b(n - 1); for (int i = 0; i < n - 1; i++) { cin >> a[i] >> b[i]; } initialize(n, a, b); } #endif // LOCAL
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...