제출 #1129774

#제출 시각아이디문제언어결과실행 시간메모리
1129774LollospadalaserBurza (COCI16_burza)C++20
0 / 160
1096 ms320 KiB
#include <bitset>
#ifdef LOCAL
// #include "librerie locali/debugging.h"
#else
#pragma GCC optimize("Ofast,unroll-loops")
#endif
#include <bits/stdc++.h>
using namespace std;
#define rep(i, x) for (int i = 0; i < (x); i++)
#define reps(i,j,x) for(int i=(j);i<(x);i++)
#define repp(i,x) for(int i = 1; i <= (x); i++)
#define all(a) a.begin(),a.end()
#define allr(a) a.rbegin(),a.rend()
#define maxint numeric_limits<int>::max()
#define minint numeric_limits<int>::min()
#define maxll numeric_limits<ll>::max()
#define minll numeric_limits<ll>::min()
#define nl '\n'
#define f first 
#define s second
#define pb push_back
typedef long long ll;
typedef unsigned long long ull;
typedef unsigned int ui;
typedef pair<int, int> pi;
typedef vector<int> vi;
typedef vector<vi> vvi;
typedef pair<ll, ll> pll;
typedef vector<ll> vll;
typedef vector<vll> vvll;
typedef vector<pi> vpi;
typedef vector<pll> vpll;
typedef vector<vpi> vvpi;
typedef vector<vpll> vvpll;
typedef array<int, 3> i3;
typedef array<ll, 3> ll3;
typedef array<int, 4> i4;
typedef array<ll, 4> ll4;
typedef vector<i3> vi3;
typedef vector<ll3> vll3;
typedef vector<i4> vi4;
typedef vector<ll4> vll4;
typedef vector<bool> vb;
typedef vector<char> vc;
typedef vector<string> vs;
using ld = long double;
 
constexpr ll mod = 1000000007;
constexpr ll mod2 = 1000000093;
pll modp = {mod,mod2};

ll nxt() {ll x;cin >> x;return x;}
template <class T> void make_unique(T &arr) {sort(all(arr)); arr.resize(unique(all(arr)) - arr.begin());}
void print(){cout<<endl;} template <typename T, typename... Types> void print(T var1, Types... var2) {cout<<var1<<" ";print(var2...);}
void printf(){cout<<nl;} template <typename T, typename... Types> void printf(T var1, Types... var2) {cout<<var1<<" ";printf(var2...);}
template <typename T> T maxm(T var) {return var;} template <typename T, typename... Types> T maxm(T var1, Types... var2) {return max(var1,maxm(var2...));}
template <typename T> T minm(T var) {return var;} template <typename T, typename... Types> T minm(T var1, Types... var2) {return min(var1,minm(var2...));}
ll lpow(ll base, ll exp){ll result = 1;for (;;){if (exp & 1)result *= base;exp >>= 1;if (!exp)break;base *= base;}return result;}
int log2_floor(unsigned long long i) {return i ? __builtin_clzll(1) - __builtin_clzll(i) : 0;}
template <typename T> T maxv(vector<T> &var) {T maxi=numeric_limits<T>::min();for(auto x : var)maxi=max(maxi,x);return maxi;}
template <typename T> T minv(vector<T> &var) {T mini=numeric_limits<T>::max();for(auto x : var)mini=min(mini,x);return mini;}
ll fastExp(ll a, ll b){ll res = 1;while(b){if(b&1)res = res*a%mod;a = a*a%mod;b>>=1;}return res;}
ll modInv(ll a){return fastExp(a,mod-2);}
ll gcd(ll a, ll b,ll &x, ll &y){if(b == 0){x = 1;y = 0;return a;}ll x1,y1;ll g = gcd(b,a%b,x1,y1);x=y1;y=x1- y1 * (a/b);return g;}
ll gcd(ll a, ll b){if(b == 0)return a;return gcd(b,a%b);}

void solve();
int main(){
	ios::sync_with_stdio(false);
	cin.tie(nullptr);
	#ifdef LOCAL
	freopen("snakes.in", "r", stdin);
	#endif
	// freopen("snakes.out", "w", stdout);
	cout << fixed << setprecision(15);
	int t=1;
	// cin>>t;
	rep(i,t){
		solve();
	}
}

void solve(){
	int n,k;
	cin>>n>>k;
	vvi adj(n);
	rep(i,n-1){
		int a,b;
		cin>>a>>b;
		a--,b--;
		adj[a].pb(b);
		adj[b].pb(a);
	}
	vi care(n,1);
	vi previ(n);
	auto dfs1 = [&](auto self, int cur, int prev, int dist)-> int{
		int maxi = 0;
		previ[cur]=prev;
		for(auto &x : adj[cur])if(x!=prev){
			maxi = max(maxi,self(self,x,cur,dist+1)+1);
		}
		if(maxi+dist<k)care[cur]=0;
		return maxi;
	};
	dfs1(dfs1, 0, -1,0);
	auto dfs = [&](auto self, bitset<400> &cur, int rem)-> int{
		// print(cur,rem);
		bitset<400> next;
		rep(i,n)if(cur[i])for(auto &x : adj[i])if(care[x] && previ[i] != x){
			next[x]=1;
		}
		// print(next);
		if(next.count() > rem)return 0;
		if(next.count() <= 1)return 1;
		if(rem)rep(i,n)if(next[i]){
			next[i]=0;
			if(self(self,next,rem-1))return 1;
			next[i]=1;
		}
		return 0;
	};
	bitset<400> start;
	start[0]=1;
	if(!care[0] || dfs(dfs,start,k))cout<<"DA"<<nl;
	else cout<<"NE"<<nl;
}
#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...