Submission #1287476

#TimeUsernameProblemLanguageResultExecution timeMemory
1287476am_aadvikCats or Dogs (JOI18_catdog)C++20
Compilation error
0 ms0 KiB
#define _CRT_SECURE_NO_WARNINGS
#include <vector>
#include<iostream>
const int inf = 1e9;
using namespace std;
#define SUBMIT 1
void initialize(int N, std::vector<int> A, std::vector<int> B);
int cat(int v);
int dog(int v);
int neighbor(int v);

#ifndef SUBMIT
#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;
}

#endif

vector<int> g[200005];
int dp[200005][3], cur[200005];
int n;
int dfs(int node, int par, int b) {
	if (dp[node][b] != -1) return dp[node][b];
	int op1 = inf, op2 = 0, op3 = 0;
	if (b != 0) op1 = dfs(node, par, 0) + 1;
	if ((cur[node] == b) || (cur[node] == 0) || (b == 0)) {
		for (auto& x : g[node])
			if (x != par)
				op2 += dfs(x, node, 1),
				op3 += dfs(x, node, 2);
	}
	else op2 = op3 = inf;
	if ((b == 1) || (cur[node] == 1)) op3 = inf;
	if ((b == 2) || (cur[node] == 2)) op2 = inf;
	return dp[node][b] = min(op1, min(op2, op3));
}
void initialize(int N, vector<int> a, vector<int> b) {
	n = N, memset(dp, -1, sizeof(dp));
	for (int i = 0; i < (n - 1); ++i)
		g[a[i]].push_back(b[i]),
		g[b[i]].push_back(a[i]);
}
int cat(int v) {
	memset(dp, -1, sizeof(dp));
	cur[v] = 1;
	return dfs(1, 0, 0);
}
int dog(int v) {
	memset(dp, -1, sizeof(dp));
	cur[v] = 2;
	return dfs(1, 0, 0);
}
int neighbor(int v) {
	memset(dp, -1, sizeof(dp));
	cur[v] = 0;
	return dfs(1, 0, 0);
}

Compilation message (stderr)

catdog.cpp: In function 'void initialize(int, std::vector<int>, std::vector<int>)':
catdog.cpp:80:16: error: 'memset' was not declared in this scope
   80 |         n = N, memset(dp, -1, sizeof(dp));
      |                ^~~~~~
catdog.cpp:4:1: note: 'memset' is defined in header '<cstring>'; did you forget to '#include <cstring>'?
    3 | #include<iostream>
  +++ |+#include <cstring>
    4 | const int inf = 1e9;
catdog.cpp: In function 'int cat(int)':
catdog.cpp:86:9: error: 'memset' was not declared in this scope
   86 |         memset(dp, -1, sizeof(dp));
      |         ^~~~~~
catdog.cpp:86:9: note: 'memset' is defined in header '<cstring>'; did you forget to '#include <cstring>'?
catdog.cpp: In function 'int dog(int)':
catdog.cpp:91:9: error: 'memset' was not declared in this scope
   91 |         memset(dp, -1, sizeof(dp));
      |         ^~~~~~
catdog.cpp:91:9: note: 'memset' is defined in header '<cstring>'; did you forget to '#include <cstring>'?
catdog.cpp: In function 'int neighbor(int)':
catdog.cpp:96:9: error: 'memset' was not declared in this scope
   96 |         memset(dp, -1, sizeof(dp));
      |         ^~~~~~
catdog.cpp:96:9: note: 'memset' is defined in header '<cstring>'; did you forget to '#include <cstring>'?