Submission #400035

# Submission time Handle Problem Language Result Execution time Memory
400035 2021-05-07T08:15:56 Z Radman_ Burza (COCI16_burza) C++14
0 / 160
1000 ms 9088 KB
//                  //
//     Radmanシ     //
//                 //
#include<iostream>
#include<vector>
#include<algorithm>
#include<map>
#include<set>
#include<queue>

using namespace std;

//#define int long long

typedef pair<int,int> pii;
typedef pair<pii,int> ppi;
typedef pair<int,pii> pip;
#define F first
#define S second

const int maxn=400+5,inf=1e9;
int dp[maxn][1<<20],mark[maxn],power[1<<21],p[21][maxn],s[maxn],e[maxn],num[maxn];
vector<int> yal[maxn];
vector<pii> a[maxn];
int n,k,t=0;

pii dfs(int now,int d)
{
    mark[now]=1;
    p[d][now]=now;
    for(int i=d-2;i>=0;i--)
        p[i][now]=p[i][p[d-1][now]];
    for(int i=d+1;i<=k;i++)
        p[i][now]=-1;
    if(d==k)
    {
        t++;
        num[t]=now;
        s[now]=t;
        e[now]=t;
        //a[k].push_back(pii(t,t));
        return pii(t,t);
    }
    int l=inf,r=0;
    int sizeee=yal[now].size();
    for(int i=0;i<sizeee;i++)
    {
        int next=yal[now][i];
        if(mark[next])
            continue;
        p[d][next]=now;
        pii p=dfs(next,d+1);
        l=min(l,p.F);
        r=max(r,p.S);
    }
    if(pii(l,r)!=pii(inf,0))
    {
        s[now]=l;
        e[now]=r;
        //a[d].push_back(pii(l,r));
    }
    return pii(l,r);
}

int32_t main()
{ 
    ios::sync_with_stdio(false);
    cin.tie(0),cout.tie(0);
    cin>>n>>k;
    for(int i=1;i<n;i++)
    {
        int u,v;
        cin>>u>>v;
        yal[u].push_back(v);
        yal[v].push_back(u);
    }
    if(k*k>=n)
    {
        cout<<"DA"<<endl;
        return 0;
    }
    int pow=1;
    power[1]=0;
    for(int i=1;i<=21;i++)
    {
        pow*=2;
        power[pow]=i;
    }
    dfs(1,0);
    for(int mask=0;mask<(1<<(k+1));mask+=2)
        dp[0][mask]=1;
    for(int i=1;i<=t;i++)
    {
        //cout<<i<<endl;
        for(int mask=0;mask<(1<<(k+1));mask+=2)
        {
            //cout<<mask<<endl;
            //int mask2=mask;
            int last=(mask&(-mask));
            int hi=power[last];
            int pa=p[hi][num[i]];
            cout<<i<<' '<<mask<<' '<<last<<' '<<hi<<' '<<pa<<endl;
            cout<<"num: "<<num[i]<<endl;
            if(pa<=1)
                continue;
            //cout<<s[pa]<<endl;
            if(dp[s[pa]-1][mask-(1<<hi)])
                dp[i][mask]=1;
            cout<<dp[i][mask]<<endl;
        }
    }
    int f=0;
    for(int mask=1;mask<(1<<(k+1));mask++)
    {
        if(!dp[t][mask])
            continue;
        f=1;
        break;
    }
    if(f)
        cout<<"DA"<<endl;
    else
        cout<<"NE"<<endl;
    return 0;
}
# Verdict Execution time Memory Grader output
1 Execution timed out 1092 ms 8052 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Execution timed out 1097 ms 9088 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Execution timed out 1097 ms 8572 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Execution timed out 1080 ms 8144 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Execution timed out 1099 ms 9020 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Execution timed out 1095 ms 9028 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Execution timed out 1096 ms 9008 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Execution timed out 1091 ms 8128 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Execution timed out 1095 ms 7968 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Execution timed out 1097 ms 8440 KB Time limit exceeded
2 Halted 0 ms 0 KB -