Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <cstdio>
- #include <vector>
- #include <queue>
- #include <iostream>
- using namespace std;
- vector <long long int> b, d;
- long long int N;
- queue <long long int> q;
- vector<long long int> G[100000];
- void addEdge(long long int a, long long int b)
- {
- G[a].push_back(b);
- G[b].push_back(a);
- }
- int main()
- {
- cin >> N;
- long long int p;
- for (int i = 0; i < N; i++)
- {
- cin >> p;
- addEdge(i + 1, p);
- b.push_back(0);
- d.push_back(0);
- }
- long long int t = 0;
- q.push(0);
- while (!q.empty())
- {
- long long int u = q.front();
- q.pop();
- for(long long int i = 0; i < G[u].size(); ++i)
- {
- long long int v =G[u][i];
- if (b[v] == 0)
- {
- b[v] = 1;
- b[u] = 1;
- d[v] = d[u] + 1;
- q.push(v);
- if ( v == N) t = 1;
- }
- }
- }
- long long int m = 0, m1 = 0;
- if (t == 0) N = N - 1;
- for (long long int u = 0; u <= N; u++)
- if (d[u] > m)
- {
- m = d[u];
- m1 = u;
- }
- cout << m1;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement