제출 #261362

#제출 시각아이디문제언어결과실행 시간메모리
261362dolphingarlicBurza (COCI16_burza)C++14
0 / 160
25 ms640 KiB
#include <bits/stdc++.h> using namespace std; int n, k, depth[401], l[401], r[401], cnt = 0; vector<int> graph[401], to_check[401]; bool dp[401][1 << 20]; void dfs(int node = 1, int parent = 0) { if (depth[node] == k) { l[node] = r[node] = ++cnt; return; } for (int i : graph[node]) if (i != parent) { depth[i] = depth[node] + 1; dfs(i, node); l[node] = min(l[node], l[i]); r[node] = max(r[node], r[i]); } if (node != 1) to_check[r[node]].push_back(node); } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cin >> n >> k; if (k * k > n) return cout << "DA", 0; for (int i = 1; i < n; i++) { int u, v; cin >> u >> v; graph[u].push_back(v); graph[v].push_back(u); } dfs(); for (int i = 1; i <= n; i++) depth[i]--; dp[0][0] = true; for (int i = 1; i <= cnt; i++) { for (int j = 0; j < (1 << k); j++) { for (int k : to_check[i]) { if (j & (1 << depth[k])) { dp[i][j] |= dp[l[k] - 1][j ^ (1 << depth[k])]; } } } } for (int i = 0; i < (1 << k); i++) { if (dp[cnt][i]) return cout << "DA", 0; } cout << "NE"; return 0; }
#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...