제출 #1159869

#제출 시각아이디문제언어결과실행 시간메모리
1159869Der_VlaposCats or Dogs (JOI18_catdog)C++20
38 / 100
3092 ms4680 KiB
#include "catdog.h" #include <bits/stdc++.h> using namespace std; #define pii pair<int, int> #define f first #define s second #define ll long long #define pb push_back #define all(v) v.begin(), v.end() const int BIG = 1e9 + 10; int x; vector<vector<int>> tree; vector<int> type; int n; vector<int> dfs(int v, int pr = -1) { vector<int> cur(3); for (int tov : tree[v]) if (tov != pr) { vector<int> res = dfs(tov, v); for (int f = 0; f < 3; ++f) { int mn = n; for (int tof = 0; tof < 3; ++tof) if (tof != f) { mn = min(mn, res[tof]); } cur[f] += min(res[f], mn + 1); } } if (type[v]) cur[1 + (2 - type[v])] = cur[0] = n; cur[0] = min(cur[0], n); cur[1] = min(cur[1], n); cur[2] = min(cur[2], n); return cur; } int getAns() { auto getCur = dfs(0); return min({getCur[0], getCur[1], getCur[2]}); } void initialize(int N, std::vector<int> A, std::vector<int> B) { n = N; tree.resize(n); type.resize(n, 0); for (int i = 0; i < n - 1; ++i) { --A[i], --B[i]; tree[A[i]].pb(B[i]); tree[B[i]].pb(A[i]); } } int cat(int v) { --v; type[v] = 1; return getAns(); } int dog(int v) { --v; type[v] = 2; return getAns(); } int neighbor(int v) { --v; type[v] = 3; return getAns(); } // #include "catdog.h" // #include <cstdio> // #include <cassert> // #include <vector> // #include <stdlib.h> // int readInt() // { // int i; // if (scanf("%d", &i) != 1) // { // fprintf(stderr, "Error while reading input\n"); // exit(1); // } // return i; // } // int main() // { // int N = readInt(); // std::vector<int> A(N - 1), B(N - 1); // for (int i = 0; i < N - 1; i++) // { // A[i] = readInt(); // B[i] = readInt(); // } // int Q; // assert(scanf("%d", &Q) == 1); // std::vector<int> T(Q), V(Q); // for (int i = 0; i < Q; i++) // { // T[i] = readInt(); // V[i] = readInt(); // } // initialize(N, A, B); // std::vector<int> res(Q); // for (int j = 0; j < Q; j++) // { // if (T[j] == 1) // res[j] = cat(V[j]); // else if (T[j] == 2) // res[j] = dog(V[j]); // else // res[j] = neighbor(V[j]); // } // for (int j = 0; j < Q; j++) // printf("%d\n", res[j]); // return 0; // }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...