답안 #243133

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
243133 2020-06-30T12:13:35 Z kartel Burza (COCI16_burza) C++14
0 / 160
123 ms 95736 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 +1000500
#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;

char f[25][(1 << 25)];
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)
    {
        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()
{
    f[0][0] = 1;

    for (i = 1; 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
# 결과 실행 시간 메모리 Grader output
1 Runtime error 123 ms 95736 KB Execution killed with signal 11 (could be triggered by violating memory limits)
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 73 ms 50424 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 62 ms 50636 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 111 ms 95736 KB Execution killed with signal 11 (could be triggered by violating memory limits)
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 57 ms 50428 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 55 ms 50296 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 113 ms 95608 KB Execution killed with signal 11 (could be triggered by violating memory limits)
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 40 ms 48248 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 35 ms 47864 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 50 ms 48884 KB Output isn't correct
2 Halted 0 ms 0 KB -