-
个人简介
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; struct zzz { int t, nex; }e[500010 << 1]; int head[500010], tot; void add(int x, int y) { e[++tot].t = y; e[tot].nex = head[x]; head[x] = tot; } int depth[500001], fa[500001][22], lg[500001]; void dfs(int now, int fath) { fa[now][0] = fath; depth[now] = depth[fath] + 1; for(int i = 1; i <= lg[depth[now]]; ++i) fa[now][i] = fa[fa[now][i-1]][i-1]; for(int i = head[now]; i; i = e[i].nex) if(e[i].t != fath) dfs(e[i].t, now); } int LCA(int x, int y) { if(depth[x] < depth[y]) swap(x, y); while(depth[x] > depth[y]) x = fa[x][lg[depth[x]-depth[y]] - 1]; if(x == y) return x; for(int k = lg[depth[x]] - 1; k >= 0; --k) if(fa[x][k] != fa[y][k]) x = fa[x][k], y = fa[y][k]; return fa[x][0]; } int main() { int n, m, s; scanf("%d%d%d", &n, &m, &s); for(int i = 1; i <= n-1; ++i) { int x, y; scanf("%d%d", &x, &y); add(x, y); add(y, x); } for(int i = 1; i <= n; ++i) lg[i] = lg[i-1] + (1 << lg[i-1] == i); dfs(s, 0); for(int i = 1; i <= m; ++i) { int x, y; scanf("%d%d",&x, &y); printf("%d\n", LCA(x, y)); } return 0; }
-
通过的题目
- 459
- 464
- 465
- 466
- 467
- 477
- 514
- 517
- 533
- 561
- 562
- 606
- 613
- 614
- 615
- 616
- 617
- 625
- 626
- 642
- 643
- 653
- 657
- 658
- 659
- 663
- 666
- 667
- 668
- 682
- 683
- 684
- 700
- 701
- 702
- 703
- 707
- 713
- 714
- 716
- 717
- 723
- 733
- 743
- 748
- 761
- 768
- 769
- 773
- 774
- 786
- 787
- 821
- 828
- 829
- 837
- 862
- 877
- 938
- 955
- 958
- 966
- 968
- 970
- 975
- 1009
- 1036
- 1037
- 1064
- 1077
- 1092
- 1110
- 1127
- 1138
- 1157
- 1158
- 1193
- 1198
- 1208
- 1381
- 1382
- 1599
- 1811
- 1852
- 1863
- 1868
- 1869
- 1888
- 1898
- 1899
- 1900
- 1901
- 1902
- 1904
- 1910
- 1911
- 1926
- 1934
- 1938
- 1939
- 1940
- 1941
- 1968
- 1970
- 1971
- 1972
- 1974
- 1977
- 1978
- 1979
- 1983
- 1997
- 2004
- 2009
- 2011
- 2012
- 2013
- 2019
- 2020
- 2023
- 2032
- 2033
- 2039
- 2043
- 2045
- 2059
- 2078
- 2113
- 2161
- 2204
- 2209
- 2214
- 2261
- 2276
- 2281
- 2351
- 2644
- 2651
- 2652
- 2680
- 2708
- 2852
- 2859
- 2860
- 2873
- 2892
-
最近活动
- C2025届2024年1月27日-寒假集训 作业
- C2025届2023年10月20日练习_STL 作业
- C2025届2023年暑期练习 作业
- C2025届普及组一阶总复习(20230715) 作业
- C2025届普及组一阶测试(20230715) OI
- C2025届普及组一阶基础知识测试(20230610) OI
- C2025届普及组一阶中期测试(20230605) OI
- C2025届循环结构练习3周日班(20230521) 作业
- C2025届循环结构练习3周六班(20230521) 作业
- C2025届循环结构练习2周六班(20230516) 作业
- C2025届循环结构练习2周日班(20230516) 作业
- C2025届选择结构练习周六班(20230413) 作业
题目标签
- 基础语法
- 68
- 分支问题
- 51
- 基础问题
- 41
- 顺序结构
- 33
- 简单循环
- 33
- 字符串
- 23
- 数组问题
- 20
- 入门
- 17
- 递归
- 17
- 普及组
- 17
- 嵌套循环
- 15
- 需要找规律的循环
- 14
- dfs
- 14
- 文件重定向
- 12
- 搜索
- 12
- 循环
- 11
- 数论
- 11
- 素数判定
- 11
- noip
- 11
- 二维数组
- 9