lightoj-1128-Greatest Parent(二分+LCA)
首先我要实力吐槽这个lightoj
它给我的注册密码藏在不为人所见的地方
注册注册了10多分钟
qwq
----------------------------------------------------------------
其次我要再吐槽一下这个难懂的题目
全英文emm...
百度翻译都救不了我
(我画图花半天,才懂emm...)
--------------------------------------------------------------
好的
我还是先解释一下题目吧
最最最一开始给你一个t
一共要整t次(t个不同的树)
每次的根节点的编号都为0
先给你2个数n、m
n个节点的树
m次询问
接下来的n-1行
第i行(1 <= i <= n-1)也有两个数x,y
x为i点的父节点的编号
y为i点的权值
再接下来的m行为m次询问
每行也有两个数x,y
每次查询x的父节点中,权值大于或等于y,离x最远的节点,输出它的编号
----------------------------------------------------------------------------------------------------------
基于倍增LCA思想上又用了二分
和倍增LCA一样
首先需要预处理出来fa[ ][ ]数组
于是就开始二分找到最深的节点
---------------------------------------------------------------------------------------------------------
#include<cstdio>
#include<cstring>
#define N 500100
using namespace std; int n,m,dn[N],fa[N][],dq,last,t,tt; inline int lca(int l,int r)
{
last--;
if(l == r || dn[l] >= dq && dn[fa[l][]] < dq)
return l;
while((fa[l][last] == -) || dn[fa[l][last]] < dn[r])
last--;
if(dn[fa[l][last]] < dq)
return lca(l,fa[l][last]);
else if(dn[fa[l][last]] > dq)
return lca(fa[l][last],r);
return fa[l][last];
} int main()
{
int t;
scanf("%d",&t);
int tt = t;
while(t--)
{
memset(fa,-,sizeof(fa));
scanf("%d%d",&n,&m);
for(int i = ; i < n; i++)
{
int x ,y;
scanf("%d%d",&x,&y);
dn[i] = y;
fa[i][] = x;
}
dn[] = ;
printf("Case %d:\n",tt - t); for(int i = ; i < n; i++)
{
for(int j=; j <= ; j++)
{
if(fa[i][j - ] == -)
continue;//超出深度
fa[i][j] = fa[fa[i][j-]][j - ];
}
} for(int i = ; i <= m; i++)
{
last = ;
int x;
scanf("%d%d",&x,&dq);
printf("%d\n",lca(x,));
}
}
return ;
}
lightoj-1128-Greatest Parent(二分+LCA)的更多相关文章
- Lightoj 1128 - Greatest Parent
Gate 倍增模板,在一个严格小根堆中,给定$x,y$,求$x$的祖先中$≥y$的最高点. 注意清零 #include<cstdio> #include<iostream> # ...
- NOIP2015 运输计划(二分+LCA+差分)
4326: NOIP2015 运输计划 Time Limit: 30 Sec Memory Limit: 128 MBSubmit: 308 Solved: 208[Submit][Status] ...
- HDU 3830 Checkers(二分+lca)
Description Little X, Little Y and Little Z are playing checkers when Little Y is annoyed. So he wan ...
- 1128 - Greatest Parent---LightOj(LCA+离线算法)
题目链接:http://lightoj.com/volume_showproblem.php?problem=1128 给你一颗树,树的每个节点都有一个权值,树根是节点0,权值为1,树中每个节点的权值 ...
- bzoj4326 树链剖分 + 线段树 // 二分 lca + 树上差分
https://www.lydsy.com/JudgeOnline/problem.php?id=4326 题意:N个点的树上给M条树链,问去掉一条边的权值之后所有树链长度和的最大值最小是多少. 首先 ...
- P2680 运输计划[二分+LCA+树上差分]
题目描述 公元20442044 年,人类进入了宇宙纪元. L 国有 nn 个星球,还有 n-1n−1 条双向航道,每条航道建立在两个星球之间,这 n-1n−1 条航道连通了 LL 国的所有星球. 小 ...
- bzoj4326: NOIP2015 运输计划(二分+LCA+树上差分)
题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=4326 题目大意:有一颗含有n个顶点的树,每两个点之间有一个边权,现在有m个运输计划,每个 ...
- lightoj.1048.Conquering Keokradong(二分 + 贪心)
Conquering Keokradong Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%lld & %llu ...
- hdu3830 (二分+LCA)
转载请注明出处: http://www.cnblogs.com/fraud/ ——by fraud Checkers Time Limit: 2000/1000 MS (Java/O ...
随机推荐
- BZOJ4559: [JLoi2016]成绩比较(dp 拉格朗日插值)
题意 题目链接 Sol 想不到想不到.. 首先在不考虑每个人的真是成绩的情况下,设\(f[i][j]\)表示考虑了前\(i\)个人,有\(j\)个人被碾压的方案数 转移方程:\[f[i][j] = \ ...
- HDU1521 排列组合(生成函数 背包)
题意 链接 Sol 可以用生成函数做,也可以用组合数做. 生成函数就是无脑算一下阶乘暴力背包,然后最后再乘上\(M\)的阶乘 组合数的方法就是用类似背包的转移,转移的时候考虑当前放的这几个的方案数即可 ...
- 洛谷P4589 [TJOI2018]智力竞赛(二分答案 二分图匹配)
题意 题目链接 给出一个带权有向图,选出n + 1n+1条链,问能否全部点覆盖,如果不能,问不能覆盖的点权最小值最大是多少 Sol TJOI怎么净出板子题 二分答案之后直接二分图匹配check一下. ...
- PVS桌面主镜像配置后,实际用户登录,配置未生效
1.打开系统属性——高级——用户配置文件下的[设置] 2.打开用户配置文件,可以看到[复制]项灰化 3.使用windwows enable 工具启动上述灰化项,运行附件的exe文件后,任务栏出现下图标 ...
- 口碑点餐相关问题FAQ
1.菜品上传中:出现重复错误或者违禁词 检查并修改商家中心本次上传中的重复菜品,或者删除口碑掌柜以及第三方平台已添加的重复菜品(重复菜品临时快捷办法:修改菜品名称) 2.手持pos 打开自动接单,无响 ...
- RMAN-06172 Troubleshooting
今天在RMAN还原测试过程中,遇到了"RMAN-06172: no autobackup found or specified handle is not a valid copy or ...
- spring applicationContext.xml最全约束
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...
- 洗礼灵魂,修炼python(68)--爬虫篇—番外篇之webbrowser模块
题外话: 爬虫学到这里,我想你大部分的网站已经不再话下了对吧?有检测报文头的,我们可以伪造报文头为浏览器,有检测IP,我们可以用代理IP,有检测请求速度的,我们可以用time模块停顿一下,需要登录验证 ...
- SQL SERVER 查询表的行数
SELECT OBJECT_NAME(ii.id) TableName ,rows FROM sysindexes ii INNER JOIN sysobjects oo ON ( oo.id = i ...
- linux后台执行程序
当我们在终端或控制台工作时,可能不希望由于运行一个作业而占住了屏幕,因为可能还有更重要的事情要做,比如阅读电子邮件.对于密集访问磁盘的进程,我们更希望它能够在每天的非负荷高峰时间段运行(例如凌晨).为 ...