2015北京网络赛 Couple Trees 倍增算法
来源:互联网 发布:大智慧编程函数大全 编辑:程序博客网 时间:2024/06/03 18:13
2015北京网络赛 Couple Trees
题意:两棵树,求不同树上两个节点的最近公共祖先
思路:比赛时看过的队伍不是很多,没有仔细想。今天补题才发现有个 倍增算法,自己竟然不知道。
解法来自 qscqesze ,这个其实之前如果了解过倍增的话还是不是很难,不过这题的数据也不是很给力,极限数据理论上是过不了的。
其他解法有树链剖分?并不是很清楚。就这样水过了吧。。。
1 #include <iostream> 2 #include <cstdio> 3 #include <fstream> 4 #include <algorithm> 5 #include <cmath> 6 #include <deque> 7 #include <vector> 8 #include <queue> 9 #include <string>10 #include <cstring>11 #include <map>12 #include <stack>13 #include <set>14 #define LL long long15 #define eps 1e-816 #define INF 0x3f3f3f3f17 #define MAXN 10000518 using namespace std;19 20 int f1[MAXN][20], f2[MAXN][20];21 int deep1[MAXN], deep2[MAXN];22 int step1, step2, ans;23 void work(int x, int y){24 step1 = step2 = 1;25 while (x != y){26 if (x < y){27 //x < y means y is not x's ancestor, so let y up28 for (int i = 15; i >= 0; i--){29 if (f2[y][i] > x){30 y = f2[y][i];31 step2 += 1 << i;32 break;33 }34 }35 y = f2[y][0];36 step2++;37 }38 else{39 for (int i = 15; i >= 0; i--){40 if (f1[x][i] > y){41 x = f1[x][i];42 step1 += 1 << i;43 break;44 }45 }46 x = f1[x][0];47 step1++;48 }49 }50 ans = x;51 }52 int main()53 {54 #ifndef ONLINE_JUDGE55 freopen("in.txt", "r", stdin);56 //freopen("out.txt", "w", stdout);57 #endif // OPEN_FILE58 int n, m;59 while (~scanf("%d%d", &n, &m)){60 int x, y;61 deep1[1] = deep2[1] = 1;62 for (int i = 0; i <= 15; i++){63 f1[1][i] = f2[1][i] = 1;64 }65 for (int i = 2; i <= n; i++){66 scanf("%d", &x);67 f1[i][0] = x;68 deep1[i] = deep1[x] + 1;69 for (int j = 1; j <= 15; j++){70 f1[i][j] = f1[f1[i][j - 1]][j - 1];71 }72 }73 for (int i = 2; i <= n; i++){74 scanf("%d", &x);75 f2[i][0] = x;76 deep2[i] = deep2[x] + 1;77 for (int j = 1; j <= 15; j++){78 f2[i][j] = f2[f2[i][j - 1]][j - 1];79 }80 }81 ans = 0;82 for (int i = 1; i <= m; i++){83 scanf("%d%d", &x, &y);84 x = (x + ans) % n + 1;85 y = (y + ans) % n + 1;86 work(x, y);87 printf("%d %d %d\n", ans, step1, step2);88 }89 }90 }
0 0
- 2015北京网络赛 Couple Trees 倍增算法
- hihoCoder1232 Couple Trees LCA倍增算法+二分
- hiho1232 Couple Trees
- hihoCoder 1232 Couple Trees(LCA)
- icpc 北京网络赛 1006 贪心算法
- 2015北京网络赛 Boxes
- 倍增算法
- 2015北京赛区网络赛模拟题
- 2015北京赛区网络赛 Boxes
- hihoCoder1228(2015北京网络赛B题)
- hihoCoder1233(2015北京网络赛H题)
- couple
- [2014 北京网络赛]
- 北京网络赛
- 2017北京网络赛
- ICPC北京网络赛-Minimum
- 2015网络赛北京赛区G题(bfs+预处理)
- hihocoder 1232 || 2015北京网络赛F题 树连剖分
- Codeforces Round#320 Div2 解题报告
- 各种排序算法的分析及java实现
- Win8.1/10中删除文件的默认关联程序
- 2015北京网络赛 G Boxes BFS+打表
- POJ 1330 Nearest Common Ancestors 倍增算法的LCA
- 2015北京网络赛 Couple Trees 倍增算法
- 中国主要咨询类型机构公司经营发展水平信息
- 2015北京网络赛 J Scores bitset+分块
- 2015北京网络赛 D-The Celebration of Rabbits 动归+FWT
- ssl协议详解
- java中日期使用及转换
- 2015上海网络赛 HDU 5475 An easy problem 线段树
- 2015上海网络赛 HDU 5478 Can you find it 数学
- 2015合肥网络赛 HDU 5492 Find a path 动归