Submission #537406

#TimeUsernameProblemLanguageResultExecution timeMemory
537406mmonteiroBurza (COCI16_burza)C++17
0 / 160
338 ms524288 KiB
#include "bits/stdc++.h" /* * Author: Matheus Monteiro */ using namespace std; #define SZ(a) (int)a.size() #define fastio ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0); const int MAX = 401; int n, k; vector<int> G[MAX]; int tin[MAX], tout[MAX], level[MAX], timer; vector<int> bucket[MAX]; int dp[1 << 20][MAX]; void dfs(int v, int p) { if(level[v] >= 0) bucket[level[v]].push_back(v); tin[v] = timer + 1; for(int u : G[v]) { if(u != p) { level[u] = level[v] + 1; if(level[u] < k) { dfs(u, v); } } } if(level[v] == k - 1) timer++; tout[v] = timer; } void solve() { cin >> n >> k; for(int i = 1; i < n; ++i) { int u, v; cin >> u >> v; --u; --v; G[u].push_back(v); G[v].push_back(u); } level[0] = -1; dfs(0, -1); for(int i = 0; i <= k; ++i) sort(bucket[i].begin(), bucket[i].end(), [&](int a, int b) { return tin[a] < tin[b]; } ); for(int i = 0; i < (1 << k); ++i) dp[i][0] = 1; for(int i = 1; i < (1 << k); ++i) for(int j = 0; j < k; ++j) if(i & (1 << j)) for(int u : bucket[j]) if(dp[i ^ (1 << j)][ tin[u] - 1]) dp[i][ tout[u] ] = 1; bool flag = false; for(int i = 0; i < (1 << k); ++i) if(dp[i][timer]) flag = true; cout << (flag ? "DA\n" : "NE\n"); } int32_t main() { fastio; solve(); return 0; }
#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...