Submission #1109925

#TimeUsernameProblemLanguageResultExecution timeMemory
110992512345678Burza (COCI16_burza)C++17
160 / 160
36 ms980 KiB
#include <bits/stdc++.h> using namespace std; const int nx=405; int n, k, u, v, dp[(1<<20)], lvl[nx], c[nx], t, l[nx], r[nx]; vector<int> d[nx], dpt[nx]; void dfs(int u, int p) { lvl[u]=lvl[p]+1; l[u]=INT_MAX; if (lvl[u]==k-1) return l[u]=r[u]=++t, dpt[lvl[u]].push_back(u), void(); for (auto v:d[u]) if (v!=p) dfs(v, u), l[u]=min(l[u], l[v]), r[u]=max(r[u], r[v]); if (u!=1) dpt[lvl[u]].push_back(u); } int main() { cin.tie(NULL)->sync_with_stdio(false); cin>>n>>k; for (int i=1; i<n; i++) cin>>u>>v, d[u].push_back(v), d[v].push_back(u); if (n<k*k) return cout<<"DA", 0; lvl[1]=-2; dfs(1, 1); for (int msk=1; msk<(1<<k); msk++) { for (int i=0; i<k; i++) if (msk&(1<<i)) for (auto u:dpt[i]) if (dp[msk^(1<<i)]+1>=l[u]) dp[msk]=max({dp[msk], r[u]}); //cout<<"debug "<<msk<<' '<<dp[msk]<<'\n'; if (dp[msk]==t) return cout<<"DA", 0; } cout<<"NE"; }
#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...