Submission #1220415

#TimeUsernameProblemLanguageResultExecution timeMemory
1220415vaneaBurza (COCI16_burza)C++20
160 / 160
25 ms840 KiB
#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], cnt = 0;
array<int, 2> intervals[mxN];

void dfs(int node, int p, int dep) {
    nodes[dep].push_back(node);
    if(dep == k) {
        idx[node] = cnt++;
        leaves[node] = {idx[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] == cnt) {
            cout << "DA";
            return 0;
        }
    }
    cout << "NE";
    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...