Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define _CRT_SECURE_NO_WARNINGS
- #define _USE_MATH_DEFINES
- #include <iostream>
- #include <fstream>
- #include <cmath>
- #include <string>
- #include <string.h>
- #include <map>
- #include <set>
- #include <vector>
- #include <algorithm>
- #include <functional>
- #include <list>
- #include <queue>
- using namespace std;
- typedef long double ld;
- typedef long int i64;
- typedef unsigned long int u64;
- const ld EPS = 1e-16;
- #define sqr(a) ((a)*(a)//;
- int n, k, slot = -1, leaf, mbans, poppush, m;
- vector <vector <int> > a;
- vector <int> dist, b, dafter[2];
- queue <int> q;
- vector <pair <int, int> > ans;
- void dfs(int v, int ind)
- {
- for (int i = 0; i < a[v].size(); ++i)
- {
- if (a[v][i] != mbans)
- {
- dfs(a[v][i], ind);
- dafter[ind][v] = max(dafter[ind][v], dafter[ind][a[v][i]] + 1);
- }
- }
- }
- int main()
- {
- cout.precision(24);
- freopen("input.txt", "r", stdin);
- freopen("output.txt", "w", stdout);
- cin >> n >> k;
- a.resize(n+5);
- b.resize(n+5);
- dist.resize(n+5);
- dafter[0].resize(n+5);
- dafter[1].resize(n+5);
- for (int i = 0; i < n; ++i)
- {
- cin >> b[i + 1];
- a[b[i + 1]].push_back(i + 1);
- }
- q.push(0);
- while (q.size())
- {
- if (a[q.front()].size() < k && slot == -1)
- slot = q.front();
- for (int i = 0; i < a[q.front()].size(); ++i)
- {
- dist[a[q.front()][i]] = dist[q.front()] + 1;
- q.push(a[q.front()][i]);
- }
- if (dist[q.front()] > dist[leaf])
- leaf = q.front();
- q.pop();
- }
- dfs(0, 0);
- int diff = dist[leaf] - dist[slot];
- ans.resize(diff);
- mbans = leaf;
- for (int i = 0; i < diff; ++i)
- {
- for (int j = 0; j < dafter[1].size(); ++j)
- dafter[1][j] = 0;
- dfs(0, 1);
- dfs(mbans, 1);
- ans[i].first = max(dafter[1][0], dist[slot] + dafter[1][mbans] + 1);
- ans[i].second = mbans;
- mbans = b[mbans];
- }
- for (int i = 0; i < ans.size(); ++i)
- if (ans[m].first > ans[i].first)
- m = i;
- cout << ans[m].second << ' ' << slot;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement