Pagini recente » Cod sursa (job #1661084) | Cod sursa (job #2067537) | Cod sursa (job #614083) | Cod sursa (job #2910285) | Cod sursa (job #2358328)
#include <bits/stdc++.h>
#define nmax 100001
using namespace std;
ofstream fout("lca.out");
ifstream fin("lca.in");
int n,m;
vector <int> L[nmax];
bitset <nmax> viz;
int BFS(int x, int y)
{
int nod;
queue <int> q;
viz.reset();
q.push(x);
q.push(y);
viz[x] = viz[y] = 1;
while(!q.empty())
{
nod = q.front();
q.pop();
for(auto i : L[nod])
if(viz[i] == 0)
{
viz[i] = 1;
q.push(i);
}
else return i;
}
}
int main()
{
int x,y;
fin >> n >> m;
y = 2;
n--;
while(n--)
{
fin >> x;
L[y].push_back(x);
y++;
}
while(m--)
{
fin >> x >> y;
fout << BFS(x,y) << "\n";
}
fin.close();
fout.close();
return 0;
}