Submission #1338804

#TimeUsernameProblemLanguageResultExecution timeMemory
1338804po_rag526Burza (COCI16_burza)C++20
160 / 160
37 ms988 KiB
#include<bits/stdc++.h>
using namespace std;
bitset<1<<20> dp[410];
int dep[410],k,CC,in[410],out[410];
vector<int>adj[410];
vector<pair<int,int>>go[410];
void dfs(int n,int p){
    dep[n]=dep[p]+1;
    in[n]=CC;
    if(dep[n]==k){
        out[n]=++CC;
        return;
    }
    for(auto x:adj[n])
        if(x-p)
            dfs(x,n);
    out[n]=CC;
}
signed main(){
    cin.tie(0)->sync_with_stdio(0);
    int n;
    cin>>n>>k;
    if(k*k>=n){
        cout<<"DA\n";
        return 0;
    }
    for(int i=1;i<n;i++){
        int a,b;
        cin>>a>>b;
        adj[a].push_back(b);
        adj[b].push_back(a);
    }
    dep[0]=-1;
    dfs(1,0);
    dp[0][0]=1;
    for(int i=2;i<=n;i++)
        if(dep[i])
            go[in[i]].push_back({dep[i]-1,out[i]});
    for(int i=0;i<CC;i++)
        for(int j=0;j<(1<<k);j++)
            if(dp[i][j])
                for(auto [d,o]:go[i])
                    if(!(j&1<<d))
                        dp[o][j+(1<<d)]=1;
    cout<<(dp[CC].count()?"DA\n":"NE\n");
}
#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...