当前位置:网站首页>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;
}
边栏推荐
- 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
- Parsing of XML
- [JS] - [sort related] - Notes
- Consolidated expression C case simple variable operation
- 如果炒股开华泰证券的户,在网上开户安全吗?
- 跨域请求
- How to effectively monitor the DC column head cabinet
- 海思3559万能平台搭建:YUV422的踩坑记录
- JS 将伪数组转换成数组
- Go step on the pit - no required module provides package: go mod file not found in current directory or any parent
猜你喜欢
【雅思阅读】王希伟阅读P4(matching1)
How to apply for PMP project management certification examination?
圖解網絡:什麼是網關負載均衡協議GLBP?
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
企业公司项目开发好一部分基础功能,重要的事保存到线上第一a
[论文阅读] CarveMix: A Simple Data Augmentation Method for Brain Lesion Segmentation
[path planning] RRT adds dynamic model for trajectory planning
Skills in analyzing the trend chart of London Silver
Parsing of XML
【雅思阅读】王希伟阅读P3(Heading)
随机推荐
[kotlin] the third day
跨域请求
Is it safe to open an account in the College of Finance and economics? How to open an account?
Summer challenge brings you to play harmoniyos multi terminal piano performance
The pit of sizeof operator in C language
如何将自己的代码作品快速存证,已更好的保护自己劳动成果
香港珠宝大亨,22亿“抄底”佐丹奴
微服务(Microservice)那点事儿
Build your own minecraft server with fast parsing
[monitoring] ZABBIX
【雅思阅读】王希伟阅读P3(Heading)
认识ThreadPoolExecutor
Life is changeable, and the large intestine covers the small intestine. This time, I can really go home to see my daughter-in-law...
Date time type and format in MySQL
go踩坑——no required module provides package : go.mod file not found in current directory or any parent
22-07-02周总结
如何报考PMP项目管理认证考试?
[Peking University] tensorflow2.0-1-opening
公司要上监控,Zabbix 和 Prometheus 怎么选?这么选准没错!
Fast analysis -- easy to use intranet security software