제출 #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...