Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- #define pb push_back
- #define sz(x) x.size()
- #define F first
- #define S second
- #define mp make_pair
- #define ll long long
- #define sqr(x) ((x)*(x))
- using namespace std;
- ll a[1010][1010], b[100010], c[10010];
- ll mn=1e9, mx=-1e9, ans, cnt, sm;
- bool ok, okk, u[10000010], uu[10000010];
- ll n, m;
- int x, y;
- vector <int> v;
- void dfsx(ll l){
- u[l]=1;
- for(int i=1;i<=n;i++){
- if(a[i][l]==1 && !u[i]){
- v.pb(i);
- dfsx(i);
- }
- }
- }
- void dfsy(ll r){
- uu[r]=1;
- for(int i=1;i<=n;i++){
- if(a[i][r]==1 && !uu[i]){
- for(int j=0;j<sz(v);j++){
- if(i==v[j]){
- ok=true;
- ans=i;
- break;
- }
- }
- if(!ok){
- dfsy(i);
- }
- }
- if(ok){
- break;
- }
- }
- }
- int main(){
- freopen ("input.txt","r",stdin);
- freopen ("output.txt","w",stdout);
- cin>>n;
- cin>>x>>y;
- for(int i=0;i<n-1;i++){
- int k;
- cin>>k;
- a[k][i+2]=1;
- }
- if(a[x][y]==1){
- cout<<x;
- return 0;
- }
- if(a[y][x]==1){
- cout<<y;
- return 0;
- }
- dfsx(x);
- dfsy(y);
- if(ans==0){
- ans=1;
- }
- cout<<ans;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement