Submission #243147

# Submission time Handle Problem Language Result Execution time Memory
243147 2020-06-30T12:35:25 Z kartel Burza (COCI16_burza) C++14
160 / 160
69 ms 3320 KB
#include <bits/stdc++.h>
//#include <ext/pb_ds/assoc_container.hpp>
//#include <ext/pb_ds/tree_policy.hpp>
#define in(x) freopen(x, "r", stdin)
#define out(x) freopen(x, "w", stdout)
#pragma GCC optimize("Ofast")
#pragma GCC optimize("unroll-loops")
#pragma GCC optimize("-O3")
#define F first
#define S second
#define pb push_back
#define N +4005
#define M ll(1e9 + 7)
#define sz(x) (int)x.size()
#define re return
#define oo ll(1e9)
#define el '\n'
#define pii pair <int, int>
#define err ld(1e-9)
#define last(x) x.back()
#define all(x) (x).begin(), (x).end()
#define arr_all(x, n) (x + 1), (x + 1 + n)
using namespace std;
//using namespace __gnu_pbds;
//typedef tree <int, null_type, less_equal <int> , rb_tree_tag, tree_order_statistics_node_update> ordered_set;
typedef long long ll;
typedef long double ld;

int dp[N], i, mask, tin[N], tout[N], tim, v, u, k, n;
vector <int> g[N], vr[N];

void print(string ans)
{
    cout << ans;
    exit(0);
}

void dfs(int v, int pr)
{
    if (dp[v] == k - 1)
    {
        tin[v] = tim++;
        tout[v] = tim;
        return;
    }

    tin[v] = tim;

    for (auto u : g[v])
    {
        if (u == pr) continue;

        dp[u] = dp[v] + 1;
        dfs(u, v);
    }

    tout[v] = tim;
}

bool calc()
{
    char f[tim + 5][1 << (k + 1)];

    f[0][0] = 1;

    for (i = 2; i <= n; i++)
        vr[tin[i]].pb(i);

    for (i = 0; i < tim; i++)
    {
        for (mask = 0; mask < (1 << k); mask++)
        {
            if (!f[i][mask])
                continue;

            for (auto v : vr[i])
            {

                if (!(mask & (1 << dp[v])))
                    f[tout[v]][mask | (1 << dp[v])] = 1;
            }
        }
    }

    int can = 0;

    for (mask = 0; mask < (1 << k); mask++)
        can |= f[tim][mask];

    return can;
}

int main()
{
    srand(time(0));
    ios_base::sync_with_stdio(0);
    iostream::sync_with_stdio(0);
    ios::sync_with_stdio(0);
    cin.tie(NULL);
    cout.tie(NULL);

    //in("input.txt");
    //out("output.txt");

    cin >> n >> k;

    if (k * k >= n)
        print("DA");

    for (i = 1; i < n; i++)
    {
        cin >> u >> v;

        g[v].pb(u);
        g[u].pb(v);
    }

    dp[1] = -1;
    dfs(1, -1);

    print(calc() ? "DA" : "NE");
}

//
//00000
//00110
//00111
//00011
//00000
# Verdict Execution time Memory Grader output
1 Correct 10 ms 1024 KB Output is correct
2 Correct 48 ms 2552 KB Output is correct
3 Correct 5 ms 512 KB Output is correct
4 Correct 5 ms 512 KB Output is correct
5 Correct 5 ms 640 KB Output is correct
6 Correct 5 ms 512 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 68 ms 2808 KB Output is correct
2 Correct 49 ms 2808 KB Output is correct
3 Correct 5 ms 512 KB Output is correct
4 Correct 5 ms 512 KB Output is correct
5 Correct 68 ms 3068 KB Output is correct
6 Correct 5 ms 640 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 57 ms 2936 KB Output is correct
2 Correct 53 ms 2680 KB Output is correct
3 Correct 5 ms 512 KB Output is correct
4 Correct 5 ms 512 KB Output is correct
5 Correct 5 ms 640 KB Output is correct
6 Correct 5 ms 512 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 20 ms 1272 KB Output is correct
2 Correct 65 ms 3320 KB Output is correct
3 Correct 5 ms 512 KB Output is correct
4 Correct 5 ms 512 KB Output is correct
5 Correct 5 ms 640 KB Output is correct
6 Correct 5 ms 512 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 43 ms 2424 KB Output is correct
2 Correct 57 ms 3064 KB Output is correct
3 Correct 5 ms 512 KB Output is correct
4 Correct 5 ms 640 KB Output is correct
5 Correct 5 ms 640 KB Output is correct
6 Correct 5 ms 512 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 57 ms 2808 KB Output is correct
2 Correct 56 ms 2940 KB Output is correct
3 Correct 5 ms 512 KB Output is correct
4 Correct 5 ms 512 KB Output is correct
5 Correct 5 ms 512 KB Output is correct
6 Correct 5 ms 640 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 65 ms 3192 KB Output is correct
2 Correct 57 ms 2940 KB Output is correct
3 Correct 5 ms 512 KB Output is correct
4 Correct 5 ms 512 KB Output is correct
5 Correct 67 ms 3320 KB Output is correct
6 Correct 5 ms 640 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 19 ms 1280 KB Output is correct
2 Correct 58 ms 2936 KB Output is correct
3 Correct 5 ms 512 KB Output is correct
4 Correct 5 ms 512 KB Output is correct
5 Correct 5 ms 512 KB Output is correct
6 Correct 5 ms 640 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 9 ms 896 KB Output is correct
2 Correct 69 ms 3064 KB Output is correct
3 Correct 5 ms 512 KB Output is correct
4 Correct 5 ms 512 KB Output is correct
5 Correct 5 ms 640 KB Output is correct
6 Correct 5 ms 640 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 28 ms 1792 KB Output is correct
2 Correct 64 ms 3064 KB Output is correct
3 Correct 5 ms 512 KB Output is correct
4 Correct 5 ms 512 KB Output is correct
5 Correct 28 ms 1784 KB Output is correct
6 Correct 5 ms 512 KB Output is correct