Submission #951543

#TimeUsernameProblemLanguageResultExecution timeMemory
951543BF001Burza (COCI16_burza)C++17
160 / 160
248 ms1220 KiB
#include <bits/stdc++.h> using namespace std; #define N 405 #define M 19 int l[N], r[N], dp[(1 << M) + 5], n, cnt, dep[N], k; vector<int> adj[N]; void dfs(int u, int p){ if (dep[u] == k){ l[u] = r[u] = ++cnt; return; } for (auto x : adj[u]){ if (x == p) continue; dep[x] = dep[u] + 1; dfs(x, u); l[u] = min(l[u], l[x]); r[u] = max(r[u], r[x]); } } int getbit(int msk, int pos){ return (msk >> pos) & 1; } int offbit(int msk, int pos){ return (msk & (~(1 << pos))); } signed main(){ ios_base::sync_with_stdio(0); cin.tie(NULL); cin >> n >> k; for (int i = 1; i < n; i++){ int u, v; cin >> u >> v; adj[u].push_back(v); adj[v].push_back(u); } if (k * k >= n){ cout << "DA"; return 0; } for (int i = 1; i <= n; i++) l[i] = 1e9, r[i] = 0; dfs(1, 0); for (int msk = 1; msk < 1 << k; msk++){ for (int i = 1; i <= n; i++){ if (!dep[i] || !getbit(msk, dep[i] - 1)) continue; int lstmsk = offbit(msk, dep[i] - 1); if (dp[lstmsk] + 1 >= l[i]) dp[msk] = max({dp[msk], r[i], dp[lstmsk]}); } } if (dp[(1 << k) - 1] == cnt) cout << "DA"; else 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...