제출 #1323863

#제출 시각아이디문제언어결과실행 시간메모리
1323863gohchingjaykThe Xana coup (BOI21_xanadu)C++20
30 / 100
37 ms16928 KiB
#pragma GCC optimize("O3,inline") #include <bits/stdc++.h> #include <ext/pb_ds/assoc_container.hpp> using namespace __gnu_pbds; using namespace std; using ll = long long; #define int ll using ii = pair<int, int>; using iii = pair<ii, int>; constexpr int INF = 1e18 + 5; constexpr int MAXN = 100000 + 5; constexpr int MOD = 1e9 + 7; int dp[MAXN][2][2]; vector<int> adjlist[MAXN]; bool state[MAXN]; void dfs(int x, int pa) { dp[x][0][!state[x]] = 0; dp[x][0][state[x]] = INF; dp[x][1][!state[x]] = INF; dp[x][1][state[x]] = 1; for (int ch : adjlist[x]) { if (ch == pa) continue; dfs(ch, x); int temp[2][2]; temp[0][0] = min( dp[x][0][0] + dp[ch][0][1], dp[x][0][1] + dp[ch][1][1] ); temp[0][1] = min( dp[x][0][0] + dp[ch][1][1], dp[x][0][1] + dp[ch][0][1] ); temp[1][0] = min( dp[x][1][0] + dp[ch][0][0], dp[x][1][1] + dp[ch][1][0] ); temp[1][1] = min( dp[x][1][0] + dp[ch][1][0], dp[x][1][1] + dp[ch][0][0] ); dp[x][0][0] = temp[0][0]; dp[x][1][0] = temp[1][0]; dp[x][0][1] = temp[0][1]; dp[x][1][1] = temp[1][1]; } } signed main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); int N; cin >> N; for (int i = 1; i < N; ++i) { int u, v; cin >> u >> v; adjlist[u].emplace_back(v); adjlist[v].emplace_back(u); } for (int i = 1; i <= N; ++i) cin >> state[i]; dfs(1, -1); int ans = min(dp[1][0][1], dp[1][1][1]); cout << (ans >= INF ? "impossible" : to_string(ans)); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...