제출 #1307128

#제출 시각아이디문제언어결과실행 시간메모리
1307128NipphitchBurza (COCI16_burza)C++20
0 / 160
14 ms880 KiB
#include <bits/stdc++.h> using namespace std; const int N=400; int n,k,dp[(1<<20)+1]; vector <int> adj[N+1],cutoff_cover[N+1],depth_node[N+1]; map <int,int> lost; vector <pair <int,int>> interval; void dfs(int u,int p,int now){ depth_node[now].push_back(u); if(now==k){ lost[u]=lost.size(); cutoff_cover[u]={u}; return ; } for(int v:adj[u]){ if(v==p) continue; dfs(v,u,now+1); cutoff_cover[u].insert(cutoff_cover[u].end(),cutoff_cover[u].begin(),cutoff_cover[u].end()); } } signed main() { ios::sync_with_stdio(0); cin.tie(0); cin >> n >> k; for(int i=1;i<n;i++){ int u,v; cin >> u >> v; u--,v--; adj[u].push_back(v); adj[v].push_back(u); } if(k*k>=n){ cout << "DA"; exit(0); } dfs(0,0,0); for(auto x:cutoff_cover){ if(x.empty()) interval.push_back({-1,-1}); else interval.push_back({lost[x.front()]+1,lost[x.back()]+1}); } dp[0]=0; for(int mask=1;mask<(1<<k);mask++){ for(int i=0;i<k;i++){ if(mask&(1<<i)){ int prev=mask^(1<<i); for(int v:depth_node[i+1]){ if(interval[v].first<=prev+1){ dp[mask]=max(dp[mask],interval[v].second); } } } } if(dp[mask]==lost.size()){ cout << "DA"; exit(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...