This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
using namespace __gnu_pbds;
#define N 1000003
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const ll INF = 1e18, MOD = 1e9 + 7, MOD2 = 1e6 + 3;
int n, k, ptr;
bitset <1 << 21> d[401];
vector <int> g[N];
vector < pair <int, int> > v[401];
void dfs (int x, int p, int h) {
if (h == k) {
v[++ptr].push_back ({ptr, h - 1});
return;
}
int l = ptr + 1;
for (int to : g[x])
if (to != p) dfs (to, x, h + 1);
int r = ptr;
if (h && l) v[r].push_back ({l, h - 1});
}
int main () {
cin >> n >> k;
for (int i = 0; i < n - 1; i++) {
int a, b;
cin >> a >> b;
a--, b--;
g[a].push_back (b);
g[b].push_back (a);
}
if (k * k >= n) {
cout << "DA";
return 0;
}
dfs (0, -1, 0);
d[0][0] = 1;
for (int i = 1; i <= ptr; i++) {
for (int j = 1; j < (1 << k); j++) {
for (auto a : v[i]) {
if (j & (1 << a.second)) {
d[i][j] = (d[i][j] | d[a.first - 1][j - (1 << a.second)]);
}
}
if (ptr == i && d[i][j]) {
cout << "DA";
return 0;
}
}
}
cout << "NE";
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |