Submission #503363

#TimeUsernameProblemLanguageResultExecution timeMemory
503363amunduzbaevCats or Dogs (JOI18_catdog)C++14
38 / 100
26 ms4272 KiB
#include "catdog.h"
#include "bits/stdc++.h"
using namespace std;
#ifndef EVAL
#include "grader.cpp"
#endif

const int N = 1e3 + 5;
vector<int> edges[N];
int a[N], dp[N][2];

int dfs(int u, int p = -1){
	dp[u][0] = dp[u][1] = 0;
	for(auto x : edges[u]){
		if(x == p) continue;
		dfs(x, u);
		dp[u][0] += min(dp[x][0], dp[x][1] + 1);
		dp[u][1] += min(dp[x][0] + 1, dp[x][1]);
	}
	
	if(a[u] == 1) dp[u][1] = 1e9;
	if(a[u] == 2) dp[u][0] = 1e9;
	return min(dp[u][0], dp[u][1]);
}

void initialize(int n, vector<int> a, vector<int> b) {
	for(int i=0;i<(int)a.size();i++){
		edges[a[i]].push_back(b[i]);
		edges[b[i]].push_back(a[i]);
	}
}

int cat(int v) {
	a[v] = 1;
	return dfs(1);
}

int dog(int v) {
	a[v] = 2;
	return dfs(1);
}

int neighbor(int v) {
	a[v] = 0;
	return dfs(1);
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...