제출 #1172474

#제출 시각아이디문제언어결과실행 시간메모리
1172474ElayV13Cat in a tree (BOI17_catinatree)C++20
0 / 100
2 ms4928 KiB
#include <bits/stdc++.h> using namespace std; #define int long long #define ld long double #define FOR(a , b) for(int i = a;i <= b;i++) #define pb push_back mt19937 rng(chrono::steady_clock::now().time_since_epoch().count()); const int MXN = 2e5 + 5; const int INF = 1e18; int N , D; vector < int > adj[MXN]; int get_dia() { queue < int > q; vector < int > d(N + 1 , INF); q.push(1); d[1] = 0; while(!q.empty()) { int v = q.front(); q.pop(); for(int u : adj[v]){ if(d[u] == INF){ d[u] = d[v] + 1; q.push(u); } } } int mx = -1 , node = -1; for(int i = 1;i <= N;i++){ if(d[i] > mx) { node = i; mx = d[i]; } } q = {}; d.assign(N + 1 , INF); q.push(node); d[node] = 0; while(!q.empty()) { int v = q.front(); q.pop(); for(int u : adj[v]){ if(d[u] == INF){ d[u] = d[v] + 1; q.push(u); } } } mx = -1; for(int i = 1;i <= N;i++) mx = max(mx , d[i]); return mx; } void solve() { cin >> N >> D; for(int i = 2;i <= N;i++) { int u; cin >> u; ++u; adj[i].push_back(u); adj[u].push_back(i); } int d = get_dia(); cout << d / D + 1 << endl; } signed main(){ ios_base::sync_with_stdio(0);cin.tie(0); int T = 1; //cin >> T; FOR(1 , T) solve(); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...