Pagini recente » Cod sursa (job #2936162) | Cod sursa (job #669418) | Cod sursa (job #1498199) | Cod sursa (job #269484) | Cod sursa (job #3267233)
#include <iostream>
using namespace std;
const int MAXN = 1005;
int parent[MAXN];
int depth[MAXN];
int adj[MAXN][MAXN];
int n, m;
void dfs(int nod, int parinte) {
parent[nod] = parinte;
for (int i = 1; i <= n; ++i) {
if (adj[nod][i] && i != parinte) {
depth[i] = depth[nod] + 1;
dfs(i, nod);
}
}
}
int lca(int u, int v) {
while (depth[u] > depth[v]) u = parent[u];
while (depth[v] > depth[u]) v = parent[v];
while (u != v) {
u = parent[u];
v = parent[v];
}
return u;
}
int main() {
cin >> n >> m;
for (int i = 1; i < n; ++i) {
int a, b;
cin >> a >> b;
adj[a][b] = adj[b][a] = 1;
}
depth[1] = 0;
dfs(1, 0);
for (int i = 0; i < m; ++i) {
int u, v;
cin >> u >> v;
cout << lca(u, v) << "\n";
}
return 0;
}