当前位置:网站首页>P4281 [ahoi2008] emergency assembly / gathering (LCA)
P4281 [ahoi2008] emergency assembly / gathering (LCA)
2022-07-05 00:05:00 【eva_ can(not)survive】
[AHOI2008] Emergency assembly / party - Luogu https://www.luogu.com.cn/problem/P4281 This question obviously needs to be used LCA Write , seek 3 One point, two liang LCA And then determine , If this 3 individual LCA Equal, then they meet at that point , If one is different , At that different meeting , It is impossible to have three different situations .
Correctness can be judged by drawing a picture .
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <cstdio>
#include <string>
#include <algorithm>
#include <vector>
#include <queue>
#include <stack>
#include <cstring>
#include <set>
#include <cmath>
#include <map>
#include <bitset>
typedef long long ll;
typedef unsigned long long ull;
using namespace std;
const int MN = 65005;
const int MAXN = 1e6 + 10;
const int INF = 0x3f3f3f3f;
#define IOS ios::sync_with_stdio(false)
#define lowbit(x) ((x)&(-x))
using P = pair<int, int>;
int n, m;
int head[MAXN];
int nxt[MAXN];
int ver[MAXN];
int cnt;
int dep[MAXN];
int LOG2[MAXN];
int fafa[MAXN][20];
void add(int x, int y) {
ver[++cnt] = y;
nxt[cnt] = head[x];
head[x] = cnt;
}
void dfs(int p, int fa) {
fafa[p][0] = fa;
for (int i = 1; i <= LOG2[dep[p]]; i++) {
fafa[p][i] = fafa[fafa[p][i - 1]][i - 1];
}
for (int i = head[p]; i; i = nxt[i]) {
int v = ver[i];
if (v == fa)
continue;
dep[v] = dep[p] + 1;
dfs(v, p);
}
}
int lca(int x, int y) {
if (dep[x] < dep[y])
swap(x, y);
while (dep[x] != dep[y]) {
x = fafa[x][LOG2[dep[x] - dep[y]]];
}
if (x == y)
return x;
for (int i = LOG2[dep[x]]; i >= 0; i--) {
if (fafa[x][i] != fafa[y][i])
x = fafa[x][i], y = fafa[y][i];
}
return fafa[x][0];
}
void solve() {
int x, y, z;
scanf("%d %d %d", &x, &y, &z);
int tmp1 = lca(x, y);
int tmp2 = lca(y, z);
int tmp3 = lca(x, z);
// printf("====%d %d %d\n", tmp1, tmp2, tmp3);
if (tmp1 == tmp2 && tmp1 == tmp3 && tmp2 == tmp3) {
printf("%d %d\n", tmp1, dep[x] + dep[y] + dep[z] - 3 * dep[tmp1]);
} else if (tmp1 == tmp2 && tmp1 != tmp3) {
printf("%d %d\n", tmp3, dep[x] + dep[z] - 2 * dep[tmp3] + dep[tmp3] + dep[y] - 2 * dep[tmp1]);
} else if (tmp1 == tmp3 && tmp1 != tmp2) {
printf("%d %d\n", tmp2, dep[y] + dep[z] - 2 * dep[tmp2] + dep[tmp2] + dep[x] - 2 * dep[tmp1]);
} else if (tmp2 == tmp3 && tmp1 != tmp2) {
printf("%d %d\n", tmp1, dep[x] + dep[y] - 2 * dep[tmp1] + dep[tmp1] + dep[z] - 2 * dep[tmp2]);
}
}
int main() {
scanf("%d %d", &n, &m);
for (int i = 2; i <= n; i++) {
LOG2[i] = LOG2[i / 2] + 1;
}
dep[1] = 0;
int x, y;
for (int i = 1; i <= n - 1; i++) {
scanf("%d %d", &x, &y);
add(x, y);
add(y, x);
}
dfs(1, 0);
while (m--)
solve();
return 0;
}
边栏推荐
- 22-07-02周总结
- 企业应用业务场景,功能添加和修改C#源码
- uniapp上传头像
- P4408 [NOI2003] 逃学的小孩(树的直径)
- In the enterprise, win10 turns on BitLocker to lock the disk, how to back up the system, how to recover when the system has problems, and how to recover quickly while taking into account system securi
- 取得PMP证书需要多长时间?
- 【雅思阅读】王希伟阅读P3(Heading)
- Date time type and format in MySQL
- 多回路仪表在基站“转改直”方面的应用
- Acrel-EMS综合能效平台在校园建设的意义
猜你喜欢
同事的接口文档我每次看着就头大,毛病多多。。。
用快解析内网穿透实现零成本自建网站
Selected cutting-edge technical articles of Bi Ren Academy of science and technology
In the enterprise, win10 turns on BitLocker to lock the disk, how to back up the system, how to recover when the system has problems, and how to recover quickly while taking into account system securi
Verilog tutorial (11) initial block in Verilog
How to use fast parsing to make IOT cloud platform
The input of uniapp is invalid except for numbers
Face recognition 5- insight face padding code practice notes
Parsing of XML
Significance of acrel EMS integrated energy efficiency platform in campus construction
随机推荐
[path planning] RRT adds dynamic model for trajectory planning
Mit-6.824-lab4b-2022 (10000 word idea explanation - code construction)
Netcore3.1 JSON web token Middleware
Illustrated network: what is gateway load balancing protocol GLBP?
XML的解析
企业公司项目开发好一部分基础功能,重要的事保存到线上第一a
模板的进阶
IT转测试岗,从迷茫到坚定我究竟付出了什么?
[paper reading] Tun det: a novel network for meridian ultra sound nodule detection
业务场景功能的继续修改
同事的接口文档我每次看着就头大,毛病多多。。。
Five papers recommended for the new development of convolutional neural network in deep learning
How to effectively monitor the DC column head cabinet
企业里Win10 开启BitLocker锁定磁盘,如何备份系统,当系统出现问题又如何恢复,快速恢复又兼顾系统安全(远程设备篇)
js如何实现数组转树
使用快解析搭建自己的minecraft服务器
如何用快解析自制IoT云平台
多回路仪表在基站“转改直”方面的应用
Best practice case of enterprise digital transformation: introduction and reference of cloud based digital platform system security measures
Acrel-EMS综合能效平台在校园建设的意义