Submission #1010096

#TimeUsernameProblemLanguageResultExecution timeMemory
1010096vjudge1Burza (COCI16_burza)C++17
160 / 160
18 ms1204 KiB
#include<bits/stdc++.h>
using namespace std;
vector<int>adj[401];
vector<pair<int,int>>go[401];
int in[401],out[401],par[401],dep[401],ok[401],C,k;
bitset<1<<19>dp[401];
void dfs(int n){
    for(auto i:adj[n]) if(i-par[n])
        par[i]=n,dep[i]=dep[n]+1,dfs(i);
}
void dfs2(int n){
    in[n]=C;
    if(dep[n]==k){
        out[n]=++C;
        return;
    }
    for(auto i:adj[n])
        if(i-par[n]&&ok[i])
            dfs2(i);
    out[n]=C;
}
int main(){
    int n;
    cin>>n>>k;
    if(k>19)return puts("DA"),0;
    for(int i=1;i<n;i++){
        int a,b; cin>>a>>b;
        adj[a].push_back(b);
        adj[b].push_back(a);
    }
    dfs(1);
    for(int i=1,j;i<=n;i++)
        if(dep[j=i]==k)
            do ok[j]=1;
            while(j=par[j]);
    dfs2(1);
    for(int i=2;i<=n;i++)if(ok[i])
        go[in[i]].push_back({out[i],dep[i]-1});
    dp[0][0]=1;
    for(int i=0;i<C;i++) for(int j=0;j<1<<k;j++)
        if(dp[i][j]) for(auto[m,d]:go[i])
            if(~j&1<<d) dp[m][j|1<<d]=1;
    puts(dp[C].count()?"DA":"NE");
}

Compilation message (stderr)

burza.cpp: In function 'int main()':
burza.cpp:35:20: warning: suggest parentheses around assignment used as truth value [-Wparentheses]
   35 |             while(j=par[j]);
      |                   ~^~~~~~~
#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...