Submission #66326

#TimeUsernameProblemLanguageResultExecution timeMemory
66326zadrgaCats or Dogs (JOI18_catdog)C++14
38 / 100
3028 ms8284 KiB
#include "catdog.h" #include <bits/stdc++.h> using namespace std; #define pb push_back #define mp make_pair #define fi first #define se second #define INF (1 << 20) #define MOD (1000 * 1000 * 1000 + 7) #define maxn 100111 typedef long long ll; typedef long double ld; typedef pair<int, int> pii; int n; vector<int> adj[maxn]; int col[maxn], dp[maxn][3]; void DFS(int x, int p){ dp[x][1] = dp[x][2] = 0; if(col[x] != 0) dp[x][3 - col[x]] = INF; for(int v : adj[x]){ if(v == p) continue; DFS(v, x); dp[x][1] += min(dp[v][1], 1 + dp[v][2]); dp[x][2] += min(1 + dp[v][1], dp[v][2]); } } int solve(){ DFS(1, -1); return min(dp[1][1], dp[1][2]); } void initialize(int N, vector<int> A, vector<int> B){ n = N; for(int i = 0; i < n - 1; i++){ adj[A[i]].pb(B[i]); adj[B[i]].pb(A[i]); } } int cat(int v){ col[v] = 1; return solve(); } int dog(int v){ col[v] = 2; return solve(); } int neighbor(int v){ col[v] = 0; return solve(); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...