Pagini recente » Cod sursa (job #3287426) | Cod sursa (job #2257460) | Cod sursa (job #667969) | Cod sursa (job #217374) | Cod sursa (job #2466436)
#include <fstream>
#include <vector>
#include <set>
int findLCA(const std::vector<int>& parents, int x, int y, int root)
{
std::set<int> s;
s.insert(root);
int parent = x;
while(parent != root)
{
s.insert(parent);
parent = parents[parent-1];
}
parent = y;
bool found = false;
while(parent != root && !found)
{
if(s.find(parent) != s.end())
{
found = true;
}
else
{
parent = parents[parent-1];
}
}
return parent;
}
int main()
{
std::ifstream fin("lca.in");
std::ofstream fout("lca.out");
auto n=0, m=0, x=0, y=0, root = 1;
fin>>n>>m;
std::vector<int> parents;
parents.push_back(-1); // primul nod este nodul radacina
for(auto i=0; i < n-1; ++i)
{
fin>>x;
parents.push_back(x);
}
for(auto i=0; i < m; ++i)
{
fin >> x >> y;
fout << findLCA(parents, x, y, root) << '\n';
}
return 0;
}