Submission #1246838

#TimeUsernameProblemLanguageResultExecution timeMemory
1246838firegirlwaterboyBurza (COCI16_burza)C++20
160 / 160
32 ms840 KiB
#include <bits/stdc++.h>

using namespace std;
typedef long long ll;
typedef pair<int, int> pii;

int n, k;
map<int, int> lost;
vector<vector<int>> adj, cutoff, depth;

void dfs(int u, int p, int d) {
    depth[d].push_back(u);
    if (d == k) {
        lost[u] = lost.size();
        cutoff[u] = {u};
        return;
    }
    for (int v : adj[u]) {
        if (v == p) continue;
        dfs(v, u, d + 1);
        cutoff[u].insert(cutoff[u].end(), cutoff[v].begin(), cutoff[v].end());
    }
};

void solve() {
    cin >> n >> k;
    adj.resize(n), cutoff.resize(n), depth.resize(k + 1);
    for (int i = 0; i < n - 1; 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\n";
        return;
    }
    dfs(0, 0, 0);
    vector<pii> inter;
    for (vector<int> &cc : cutoff) {
        if (!cc.size()) {
            inter.push_back({-1, -1});
        } else {
            inter.push_back({lost[cc.front()] + 1, lost[cc.back()] + 1});
        }
    }
    vector<int> dp(1 << k);
    dp[0] = 0;
    for (int mask = 1; mask < (1 << k); mask++) {
        int &curr = dp[mask];
        for (int nxt = 0; nxt < k; nxt++) {
            if (mask & (1 << nxt)) {
                int pre = dp[mask & ~(1 << nxt)];
                for (int n : depth[nxt + 1]) {
                    if (inter[n].first <= pre + 1) {
                        curr = max(curr, inter[n].second);
                    }
                }
            }
        }
        if (dp[mask] == lost.size()) {
            cout << "DA\n";
            return;
        }
    }
    cout << "NE\n";
}

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    solve();
    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...