为什么??????没输出
  • 板块灌水区
  • 楼主StrFaith
  • 当前回复9
  • 已保存回复9
  • 发布时间2023/10/19 13:43
  • 上次更新2023/11/2 12:51:25
查看原帖
为什么??????没输出
970752
StrFaith楼主2023/10/19 13:43
#include <bits/stdc++.h>
using namespace std;
int n, m, s;
const int maxn = 5e6+1;
int fa[maxn][19];
int head[maxn];
int cnt = 0;
struct edge{
    int u, v, nxt;
}edge[maxn];
void addedge(int u, int v) {
    edge[cnt].v = v;
    edge[cnt].nxt = head[u];
    head[u] = cnt++;
}
int dep[maxn];
void init() {
    for(int i =0; i< n; i++)
        head[i] = -1;
    for(int i = 0; i< m; i++)
        edge[i].nxt = -1;
}
void dfs(int s, int fat) {
    fa[s][0] = fat;
    dep[s] = dep[fat] + 1;
    for(int i = 1; (1 << i) <= dep[s] ; i++)
        fa[s][i] = fa[fa[s][i-1]][i-1];
    for(int i = head[s]; ~i; i = edge[i].nxt) {
        if(edge[i].v != fat)
            dfs(edge[i].v, s);
    }
}
int lca(int x, int y) {
    if(dep[x] < dep[y]) swap(x, y);
    for(int i =19; i; i--) {
        if(dep[x] + (1 << i) <= dep[y])
            x = fa[x][i];
    }
    if(x == y) return x;
    for(int i = 19;i; i--) {
        if(fa[x][i] != fa[y][i]) {
            x = fa[x][i], y = fa[y][i];
        }
    }
    return fa[x][0];
}

int main() {
    init();
    memset(dep, 0, sizeof(dep));
	int u, v;
	cin >> n >> m >> s;
	for(int i = 1; i<= n-1; i++) {
		scanf("%d%d", &u, &v);
		addedge(u, v);	addedge(u, v);
	}
	dfs(s, s);
	int a, b;
	for(int i = 1;i <= m; i++) {
		scanf("%d%d", &a, &b);
		printf("%d\n", lca(a, b));
	}
	return 0;
}

读完便后就不动了,怎么回事???

2023/10/19 13:43
加载中...