当前位置:网站首页>P4281 [AHOI2008]紧急集合 / 聚会(LCA)
P4281 [AHOI2008]紧急集合 / 聚会(LCA)
2022-07-05 00:02:00 【eva_can(not)survive】
[AHOI2008]紧急集合 / 聚会 - 洛谷https://www.luogu.com.cn/problem/P4281这题很明显要用LCA写,求3个点两两LCA然后判断,如果这3个LCA相等那么他们就在该点汇合,若有一个不一样则,在那个不一样的汇合,不可能出现三个都不一样的情况。
正确性画个图就可以判断出来。
#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;
}边栏推荐
- 巩固表达式C# 案例简单变量运算
- Hong Kong Jewelry tycoon, 2.2 billion "bargain hunting" Giordano
- QT addition calculator (simple case)
- 如何在外地外网电脑远程公司项目?
- Blue sky nh55 series notebook memory reading and writing speed is extremely slow, solution process record
- 业务场景功能的继续修改
- 蓝天NH55系列笔记本内存读写速度奇慢解决过程记录
- QT personal learning summary
- XML的解析
- 【路径规划】RRT增加动力模型进行轨迹规划
猜你喜欢

巩固表达式C# 案例简单变量运算

香港珠宝大亨,22亿“抄底”佐丹奴

Jar batch management gadget

青海省国家湿地公园功能区划数数据、全国湿地沼泽分布数据、全国省市县自然保护区

French scholars: the explicability of counter attack under optimal transmission theory

Pytoch --- use pytoch to realize linknet for semantic segmentation

It's too convenient. You can complete the code release and approval by nailing it!

高配笔记本使用CAD搬砖时卡死解决记录

微服务(Microservice)那点事儿

【雅思阅读】王希伟阅读P4(matching2段落信息配对题【困难】)
随机推荐
城市轨道交通站应急照明疏散指示系统设计
[IELTS reading] Wang Xiwei reading P4 (matching1)
同事的接口文档我每次看着就头大,毛病多多。。。
圖解網絡:什麼是網關負載均衡協議GLBP?
解决无法通过ssh服务远程连接虚拟机
Application of fire fighting system based on 3D GIS platform
After Microsoft disables the IE browser, open the IE browser to flash back the solution
Best practice case of enterprise digital transformation: introduction and reference of cloud based digital platform system security measures
Enterprise application business scenarios, function addition and modification of C source code
Business implementation - the log is written to the same row of data
Acrel-EMS综合能效平台在校园建设的意义
微软禁用IE浏览器后,打开IE浏览器闪退解决办法
挖财学院开户安全的吗?开户怎么开?
[kotlin] the third day
认识ThreadPoolExecutor
企业应用业务场景,功能添加和修改C#源码
It's too convenient. You can complete the code release and approval by nailing it!
Jar batch management gadget
Robot reinforcement learning synergies between pushing and grassing with self supervised DRL (2018)
Hash table, hash function, bloom filter, consistency hash