dfs记录路径 就行了
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <algorithm>
#include <vector>
using namespace std;
const int maxn = 5000 + 7;
vector<int> G[maxn];
int n, m, cnt = 0;
int p[maxn], vis[maxn];
bool dfs(int u, int e, int d) {
if(u == e) {
if(d % 2 == 0) {
int x = e;
for(int i = 0; i < d / 2; ++i) x = p[x];
printf("The fleas meet at %d.\n", x);
} else {
int x = e, y;
for(int i = 0; i < (d - 1) / 2; ++i) x = p[x];
y = p[x];
if(x > y) swap(x, y);
printf("The fleas jump forever between %d and %d.\n", x, y);
}
return true;
}
for(int i = 0; i < G[u].size(); ++i) {
int v = G[u][i];
if(!vis[v]) {
vis[v] = 1;
p[v] = u;
if(dfs(v, e, d + 1)) return true;
}
}
return false;
}
int main() {
int u, v;
while(scanf("%d", &n) != EOF && n) {
for(int i = 0; i <= n; ++i) G[i].clear();
for(int i = 0; i < n - 1; ++i) {
scanf("%d%d", &u, &v);
G[u].push_back(v);
G[v].push_back(u);
}
scanf("%d", &m);
for(int i = 0; i < m; ++i) {
scanf("%d%d", &u, &v);
memset(vis, 0, sizeof(vis));
memset(p, 0, sizeof(p));
vis[u] = 1;
dfs(u, v, 0);
}
}
return 0;
}