Submission #828928

# Submission time Handle Problem Language Result Execution time Memory
828928 2023-08-17T20:44:08 Z QwertyPi The Xana coup (BOI21_xanadu) C++14
100 / 100
96 ms 18860 KB
#include <bits/stdc++.h>
#pragma GCC optimize("unroll-loops")
#pragma GCC optimize("Ofast")
#define int long long

using namespace std;

const int N = 1e5 + 11;
const int INF = 1 << 30;
int dp[N][2][2];
vector<int> G[N];
int a[N];

int chmin(int& x, int y){
	x = min(x, y); return x;
}
void dfs(int v, int pa = -1){
	int ch = 0;
	int d[2][2] = {{INF, INF}, {INF, INF}};
	for(auto u : G[v]){
		if(u == pa) continue; ch++; dfs(u, v);
	}

	for(int x = 0; x < 2; x++){
		int b[2][2] = {{0, INF}, {INF, INF}};
		for(auto u : G[v]){
			if(u == pa) continue;
			for(int z = 0; z < 2; z++){
				for(int y = 0; y < 2; y++){
					chmin(b[1][(z + y) % 2], b[0][z] + dp[u][x][y]);
				}
			}
			for(int y = 0; y < 2; y++) swap(b[0][y], b[1][y]), b[1][y] = INF;
		}
		for(int y = 0; y < 2; y++){
			dp[v][a[v] ^ y ^ x][x] = b[0][y] + x;
		}
	}

	if(ch == 0){
		dp[v][a[v]][0] = 0;
		dp[v][!a[v]][1] = 1;
		return;
	}
}

int32_t main(){
	int n; cin >> n;
	for(int i = 0; i < n - 1; i++){
		int u, v; cin >> u >> v;
		G[u].push_back(v);
		G[v].push_back(u);
	}
	for(int i = 1; i <= n; i++){
		cin >> a[i];
	}

	memset(dp, 0x3f, sizeof(dp));
	dfs(1);
	int ans = min(dp[1][0][0], dp[1][0][1]);

	cout << (ans > N ? "impossible" : to_string(ans)) << endl;
}

Compilation message

xanadu.cpp: In function 'void dfs(long long int, long long int)':
xanadu.cpp:21:3: warning: this 'if' clause does not guard... [-Wmisleading-indentation]
   21 |   if(u == pa) continue; ch++; dfs(u, v);
      |   ^~
xanadu.cpp:21:25: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'if'
   21 |   if(u == pa) continue; ch++; dfs(u, v);
      |                         ^~
xanadu.cpp:19:6: warning: unused variable 'd' [-Wunused-variable]
   19 |  int d[2][2] = {{INF, INF}, {INF, INF}};
      |      ^
# Verdict Execution time Memory Grader output
1 Correct 2 ms 5716 KB Output is correct
2 Correct 4 ms 5764 KB Output is correct
3 Correct 2 ms 5716 KB Output is correct
4 Correct 3 ms 5716 KB Output is correct
5 Correct 3 ms 5736 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 2 ms 5716 KB Output is correct
2 Correct 4 ms 5764 KB Output is correct
3 Correct 2 ms 5716 KB Output is correct
4 Correct 3 ms 5716 KB Output is correct
5 Correct 3 ms 5736 KB Output is correct
6 Correct 3 ms 5736 KB Output is correct
7 Correct 3 ms 5736 KB Output is correct
8 Correct 3 ms 5720 KB Output is correct
9 Correct 3 ms 5716 KB Output is correct
10 Correct 2 ms 5732 KB Output is correct
11 Correct 2 ms 5716 KB Output is correct
12 Correct 3 ms 5716 KB Output is correct
13 Correct 2 ms 5716 KB Output is correct
14 Correct 2 ms 5716 KB Output is correct
15 Correct 3 ms 5740 KB Output is correct
16 Correct 3 ms 5716 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 79 ms 18668 KB Output is correct
2 Correct 77 ms 18544 KB Output is correct
3 Correct 77 ms 18860 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 76 ms 18708 KB Output is correct
2 Correct 83 ms 18544 KB Output is correct
3 Correct 73 ms 18736 KB Output is correct
4 Correct 66 ms 11140 KB Output is correct
5 Correct 69 ms 11724 KB Output is correct
6 Correct 73 ms 11912 KB Output is correct
7 Correct 3 ms 5716 KB Output is correct
8 Correct 27 ms 7736 KB Output is correct
9 Correct 84 ms 11524 KB Output is correct
10 Correct 81 ms 11632 KB Output is correct
11 Correct 74 ms 11984 KB Output is correct
12 Correct 77 ms 12140 KB Output is correct
13 Correct 71 ms 11788 KB Output is correct
14 Correct 70 ms 12164 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 2 ms 5716 KB Output is correct
2 Correct 4 ms 5764 KB Output is correct
3 Correct 2 ms 5716 KB Output is correct
4 Correct 3 ms 5716 KB Output is correct
5 Correct 3 ms 5736 KB Output is correct
6 Correct 3 ms 5736 KB Output is correct
7 Correct 3 ms 5736 KB Output is correct
8 Correct 3 ms 5720 KB Output is correct
9 Correct 3 ms 5716 KB Output is correct
10 Correct 2 ms 5732 KB Output is correct
11 Correct 2 ms 5716 KB Output is correct
12 Correct 3 ms 5716 KB Output is correct
13 Correct 2 ms 5716 KB Output is correct
14 Correct 2 ms 5716 KB Output is correct
15 Correct 3 ms 5740 KB Output is correct
16 Correct 3 ms 5716 KB Output is correct
17 Correct 79 ms 18668 KB Output is correct
18 Correct 77 ms 18544 KB Output is correct
19 Correct 77 ms 18860 KB Output is correct
20 Correct 76 ms 18708 KB Output is correct
21 Correct 83 ms 18544 KB Output is correct
22 Correct 73 ms 18736 KB Output is correct
23 Correct 66 ms 11140 KB Output is correct
24 Correct 69 ms 11724 KB Output is correct
25 Correct 73 ms 11912 KB Output is correct
26 Correct 3 ms 5716 KB Output is correct
27 Correct 27 ms 7736 KB Output is correct
28 Correct 84 ms 11524 KB Output is correct
29 Correct 81 ms 11632 KB Output is correct
30 Correct 74 ms 11984 KB Output is correct
31 Correct 77 ms 12140 KB Output is correct
32 Correct 71 ms 11788 KB Output is correct
33 Correct 70 ms 12164 KB Output is correct
34 Correct 2 ms 5716 KB Output is correct
35 Correct 2 ms 5716 KB Output is correct
36 Correct 2 ms 5716 KB Output is correct
37 Correct 3 ms 5736 KB Output is correct
38 Correct 3 ms 5716 KB Output is correct
39 Correct 3 ms 5732 KB Output is correct
40 Correct 2 ms 5716 KB Output is correct
41 Correct 2 ms 5736 KB Output is correct
42 Correct 2 ms 5732 KB Output is correct
43 Correct 2 ms 5716 KB Output is correct
44 Correct 2 ms 5716 KB Output is correct
45 Correct 71 ms 18732 KB Output is correct
46 Correct 71 ms 18564 KB Output is correct
47 Correct 71 ms 18804 KB Output is correct
48 Correct 63 ms 11188 KB Output is correct
49 Correct 79 ms 11856 KB Output is correct
50 Correct 96 ms 11880 KB Output is correct
51 Correct 3 ms 5716 KB Output is correct
52 Correct 24 ms 7748 KB Output is correct
53 Correct 69 ms 11468 KB Output is correct
54 Correct 81 ms 11660 KB Output is correct
55 Correct 71 ms 11948 KB Output is correct
56 Correct 74 ms 12204 KB Output is correct
57 Correct 66 ms 11736 KB Output is correct
58 Correct 72 ms 12152 KB Output is correct
59 Correct 23 ms 7632 KB Output is correct
60 Correct 64 ms 10872 KB Output is correct
61 Correct 75 ms 11436 KB Output is correct
62 Correct 76 ms 11544 KB Output is correct
63 Correct 77 ms 11596 KB Output is correct
64 Correct 69 ms 11588 KB Output is correct
65 Correct 66 ms 11980 KB Output is correct
66 Correct 67 ms 12000 KB Output is correct
67 Correct 65 ms 11832 KB Output is correct
68 Correct 62 ms 11824 KB Output is correct
69 Correct 62 ms 11792 KB Output is correct
70 Correct 73 ms 11812 KB Output is correct