#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... |