#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const int mxN = 4e2+10;
int k; vector<int> adj[mxN];
vector<int> leaves[mxN];
vector<int> nodes[mxN];
int idx[mxN]; map<int, int> lost;
array<int, 2> intervals[mxN];
void dfs(int node, int p, int dep) {
nodes[dep].push_back(node);
if(dep == k) {
lost[node] = lost.size();
leaves[node] = {lost[node]};
return ;
}
for(auto it : adj[node]) {
if(it == p) continue;
dfs(it, node, dep+1);
leaves[node].insert(leaves[node].end(), leaves[it].begin(),
leaves[it].end());
}
}
int main()
{
ios_base::sync_with_stdio(0);
cin.tie(0);
int n;
cin >> n >> k;
for(int i = 1; i < n; 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";
return 0;
}
dfs(0, 0, 0);
for(int i = 0; i < n; i++) {
vector<int> &cc = leaves[i];
if(cc.empty()) intervals[i] = {-1, -1};
else intervals[i] = {cc.front()+1, cc.back()+1};
}
vector<int> dp(1 << k);
for(int mask = 1; mask < (1 << k); mask++) {
int &curr = dp[mask];
for(int dep = 0; dep < k; dep++) {
if(mask & (1 << dep)) {
int last = dp[mask ^ (1 << dep)];
for(auto it : nodes[dep+1]) {
if(intervals[it][0] <= last+1) {
curr = max(curr, intervals[it][1]);
}
}
}
}
if(dp[mask] == lost.size()) {
cout << "DA";
return 0;
}
}
cout << "NE";
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |