Submission #110638

#TimeUsernameProblemLanguageResultExecution timeMemory
110638gs14004Cats or Dogs (JOI18_catdog)C++17
38 / 100
3099 ms10472 KiB
#include "catdog.h" #include <bits/stdc++.h> using namespace std; const int MAXN = 100005; const int inf = 1e9; int n, a[MAXN]; vector<int> gph[MAXN]; int dp[MAXN][3], par[MAXN]; void cons(int v){ memset(dp[v], 0, sizeof(dp[v])); for(auto &i : gph[v]){ dp[v][0] += min({dp[i][0] + (a[i] ? inf : 0), dp[i][1] + 1 + (a[i] == 2 ? inf : 0), dp[i][2] + 1 + (a[i] == 1 ? inf : 0)}); dp[v][1] += min({dp[i][0] + (a[i] ? inf : 0), dp[i][1] + (a[i] == 2 ? inf : 0), dp[i][2] + 1 + (a[i] == 1 ? inf : 0)}); dp[v][2] += min({dp[i][0] + (a[i] ? inf : 0), dp[i][1] + 1 + (a[i] == 2 ? inf : 0), dp[i][2] + (a[i] == 1 ? inf : 0)}); } } int cat(int v) { a[v] = 1; while(v){ cons(v); v = par[v]; } if(a[1]) return dp[1][a[1]]; return min({dp[1][0], dp[1][1], dp[1][2]}); } int dog(int v) { a[v] = 2; while(v){ cons(v); v = par[v]; } if(a[1]) return dp[1][a[1]]; return min({dp[1][0], dp[1][1], dp[1][2]}); } int neighbor(int v) { a[v] = 0; while(v){ cons(v); v = par[v]; } if(a[1]) return dp[1][a[1]]; return min({dp[1][0], dp[1][1], dp[1][2]}); } void dfs(int x){ for(auto &i : gph[x]){ gph[i].erase(find(gph[i].begin(), gph[i].end(), x)); par[i] = x; dfs(i); } cons(x); } void initialize(int N, std::vector<int> A, std::vector<int> B) { n = N; for(int i=0; i<n-1; i++){ gph[A[i]].push_back(B[i]); gph[B[i]].push_back(A[i]); } dfs(1); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...