鱼C论坛

 找回密码
 立即注册
查看: 2105|回复: 11

[已解决]LCA问题

[复制链接]
发表于 2022-7-15 10:30:30 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 柿子饼同学 于 2022-7-15 10:40 编辑

真的求求了 , 真的不知道为什么过不了 , 求指出 , 给鱼币 , 帮忙看下代码吧
题目 : https://www.luogu.com.cn/problem/P3379
还有一组数据 :
输入 :
  1. 10 10 8
  2. 10 9
  3. 3 1
  4. 8 2
  5. 3 8
  6. 7 3
  7. 5 9
  8. 8 5
  9. 8 6
  10. 4 6
  11. 8 4
  12. 6 1
  13. 7 1
  14. 10 1
  15. 6 1
  16. 9 1
  17. 4 1
  18. 7 1
  19. 10 1
  20. 10 1
复制代码

输出 :
  1. 8
  2. 8
  3. 3
  4. 8
  5. 8
  6. 8
  7. 8
  8. 3
  9. 8
  10. 8
复制代码


  1. #include <bits/stdc++.h>
  2. using namespace std;

  3. const int N = 5e5 + 10;
  4. int dp[N][20], dep[N];
  5. vector<int> tree[N];
  6. int n, m, s, x, y;

  7. void dfs(int ch, int pa){
  8.     if(ch == s){
  9.         dep[ch] = 1;
  10.         for(int i = 0; i <= 20; i++){
  11.             dp[ch][i] = ch;
  12.         }
  13.     }
  14.     else{
  15.         dp[ch][0] = pa;
  16.         dep[ch] = dep[dp[ch][0]] + 1;
  17.         for(int i = 1; i <= 20; i++){
  18.             dp[ch][i] = dp[dp[ch][i-1]][i-1];
  19.         }
  20.     }
  21.     for(auto i : tree[ch]){
  22.         if(i != pa) dfs(i, ch);
  23.     }
  24. }

  25. int lca(int x, int y){
  26.     if(dep[x] < dep[y]) swap(x, y);
  27.     for(int i = 20; i >= 0; i--){
  28.         if(dep[dp[x][i]] >= dep[y]) x = dp[x][i];
  29.     }
  30.     if(x == y) return x;
  31.     for(int i = 20; i >= 0; i--){
  32.         if(dp[x][i] != dp[y][i]){
  33.             x = dp[x][i];
  34.             y = dp[y][i];
  35.         }
  36.     }
  37.     return dp[x][0];
  38. }

  39. int main(){
  40.     ios::sync_with_stdio(0);
  41.     cin.tie(0); cout.tie(0);

  42.     cin >> n >> m >> s;
  43.     for(int i = 1; i < n; i++){
  44.         cin >> x >> y;
  45.         tree[x].push_back(y);
  46.         tree[y].push_back(x);
  47.     }

  48.     dfs(s, 0);

  49.     while(m--){
  50.         cin >> x >> y;
  51.         cout << lca(x, y) << endl;
  52.     }

  53.     return 0;
  54. }
复制代码
最佳答案
2022-7-15 17:20:04
看了代码,发现的问题是越界,注意 12, 19, 30, 34 行, dp 数组的第二维度没有第 20 个元素。不喜欢洛谷所以不会去洛谷验证,用另外的评测网站测试了一下,修改后即通过测试,您可以参考。多说一句,这真的属于非常基础的,不应该出现的错误,如果因为这种问题困扰很久实在是太可惜了。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-7-15 17:20:04 | 显示全部楼层    本楼为最佳答案   

回帖奖励 +5 鱼币

看了代码,发现的问题是越界,注意 12, 19, 30, 34 行, dp 数组的第二维度没有第 20 个元素。不喜欢洛谷所以不会去洛谷验证,用另外的评测网站测试了一下,修改后即通过测试,您可以参考。多说一句,这真的属于非常基础的,不应该出现的错误,如果因为这种问题困扰很久实在是太可惜了。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-7-15 20:02:14 | 显示全部楼层
dolly_yos2 发表于 2022-7-15 17:20
看了代码,发现的问题是越界,注意 12, 19, 30, 34 行, dp 数组的第二维度没有第 20 个元素。不喜欢洛谷所 ...

哦哦哦哦哦哦 , 感谢 , 今天用了 log2n 打表的方法过了
现在会了
(没注意数组的问题...)
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-7-16 00:23:57 | 显示全部楼层

回帖奖励 +5 鱼币

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-7-16 08:43:07 | 显示全部楼层

回帖奖励 +5 鱼币

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-7-16 14:24:58 | 显示全部楼层

回帖奖励 +5 鱼币

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-7-16 23:19:30 | 显示全部楼层

回帖奖励 +5 鱼币

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-7-17 08:17:46 | 显示全部楼层

回帖奖励 +5 鱼币

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-7-17 08:22:12 | 显示全部楼层

回帖奖励 +5 鱼币

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-7-17 14:24:27 | 显示全部楼层

回帖奖励 +5 鱼币

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-7-17 15:55:26 | 显示全部楼层

回帖奖励 +5 鱼币

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-7-17 16:44:18 | 显示全部楼层

回帖奖励 +5 鱼币

白嫖
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-16 23:46

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表