제출 #1248207

#제출 시각아이디문제언어결과실행 시간메모리
1248207kunzaZa183Burza (COCI16_burza)C++20
160 / 160
37 ms840 KiB
#include <bits/stdc++.h> using namespace std; int main() { cin.tie(0)->sync_with_stdio(0); int n, k; cin >> n >> k; vector<vector<int>> adj(n); for (int i = 0; i < n - 1; i++) { int a, b; cin >> a >> b; a--, b--; adj[a].push_back(b), adj[b].push_back(a); } if (k * k >= n) { cout << "DA\n"; return 0; } vector<int> depvi(n, -1); vector<pair<int, int>> vpii(n, {INT_MAX, -1}); vector<vector<int>> depth_nodes(k + 1); int tm = 0; function<bool(int, int, int)> dfs = [&](int cur, int par, int dep) { depvi[cur] = dep; depth_nodes[dep].push_back(cur); if (dep == k) { vpii[cur] = {tm, tm}; tm++; return true; } vpii[cur].first = tm; bool sth = 0; for (auto a : adj[cur]) if (a != par) { bool x = dfs(a, cur, dep + 1); sth = sth || x; } if (sth) vpii[cur].second = tm - 1; else { vpii[cur] = {INT_MAX, -1}; } return sth; }; dfs(0, 0, 0); vector<int> dp(1 << k); for (int i = 1; i < (1 << k); i++) { for (int j = 0; j < k; j++) { if ((1 << j) & i) { int wout = i ^ (1 << j); for (auto a : depth_nodes[j + 1]) { auto [l, r] = vpii[a]; if (l <= dp[wout]) { dp[i] = max(dp[i], r + 1); } } } } } if (dp.back() == tm) { cout << "DA\n"; } else { cout << "NE\n"; } }
#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...
#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...