Submission #1306448

#TimeUsernameProblemLanguageResultExecution timeMemory
1306448BigBadBullyCat in a tree (BOI17_catinatree)C++20
51 / 100
314 ms589824 KiB
#include <bits/stdc++.h> using namespace std; #define int long long #define pii pair<int, int> #define ff first #define ss second const int inf = 2e18; const int mod = 1e9 + 7; const int mxn = 2e5+1; int exp(int x,int n) { int res = 1; for(;n>0;res=(n%2?res*x%mod:res),x=x*x%mod,n/=2); return res; } int inv(int x) { return exp(x,mod-2); } void solve() { int n,d; cin >> n >> d; vector<vector<int>> g(n); for(int i = 1;i< n; i++) { int x; cin >> x; g[i].push_back(x); g[x].push_back(i); } vector<vector<int>> dist(n,vector<int>(n,-1)); for(int rt = 0;rt<n;rt++) { function<void(int,int)> dfs = [&](int cur,int prev){ dist[rt][cur] = dist[rt][prev]+1; for(int a : g[cur]) if(a!=prev) dfs(a,cur); }; dfs(rt,rt); } int cnt = 0; vector<int> vis(n,0); function<void(int)> apply=[&](int x) { if(x < 0 || vis[x])return; cnt++; for(int i = 0;i < n; i++) if(dist[x][i]<d) vis[i] = 1; }; vector<int> id(n); for(int i = 0; i< n; i++)id[i] = i; sort(id.begin(),id.end(),[&](int a,int b){return dist[0][a]>dist[0][b];}); for(int i : id) { if(vis[i])continue; apply(i); int maxi = -1; for(int j= 0;j < n;j++) { if(vis[j])continue; if(maxi == -1 || dist[j][i] > dist[maxi][i]) maxi = j; } apply(maxi); } cout << cnt << '\n'; } signed main() { ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); int t = 1; //cin >>t; while (t--) solve(); return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...