传送门

首先我要实力吐槽这个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)的更多相关文章

  1. Lightoj 1128 - Greatest Parent

    Gate 倍增模板,在一个严格小根堆中,给定$x,y$,求$x$的祖先中$≥y$的最高点. 注意清零 #include<cstdio> #include<iostream> # ...

  2. NOIP2015 运输计划(二分+LCA+差分)

    4326: NOIP2015 运输计划 Time Limit: 30 Sec  Memory Limit: 128 MBSubmit: 308  Solved: 208[Submit][Status] ...

  3. HDU 3830 Checkers(二分+lca)

    Description Little X, Little Y and Little Z are playing checkers when Little Y is annoyed. So he wan ...

  4. 1128 - Greatest Parent---LightOj(LCA+离线算法)

    题目链接:http://lightoj.com/volume_showproblem.php?problem=1128 给你一颗树,树的每个节点都有一个权值,树根是节点0,权值为1,树中每个节点的权值 ...

  5. bzoj4326 树链剖分 + 线段树 // 二分 lca + 树上差分

    https://www.lydsy.com/JudgeOnline/problem.php?id=4326 题意:N个点的树上给M条树链,问去掉一条边的权值之后所有树链长度和的最大值最小是多少. 首先 ...

  6. P2680 运输计划[二分+LCA+树上差分]

    题目描述 公元20442044 年,人类进入了宇宙纪元. L 国有 nn 个星球,还有 n-1n−1 条双向航道,每条航道建立在两个星球之间,这 n-1n−1 条航道连通了 LL 国的所有星球. 小 ...

  7. bzoj4326: NOIP2015 运输计划(二分+LCA+树上差分)

    题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=4326 题目大意:有一颗含有n个顶点的树,每两个点之间有一个边权,现在有m个运输计划,每个 ...

  8. lightoj.1048.Conquering Keokradong(二分 + 贪心)

    Conquering Keokradong Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%lld & %llu ...

  9. hdu3830 (二分+LCA)

    转载请注明出处: http://www.cnblogs.com/fraud/          ——by fraud Checkers Time Limit: 2000/1000 MS (Java/O ...

随机推荐

  1. vuejs-指令详解

    v-if v-if指令可以完全根据表达式的值在DOM中生成或移除一个元素.如果v-if表达式赋值为false,那么对应的元素就会从DOM中移除:否则,对应元素的一个克隆将被重新插入DOM中,代码如下: ...

  2. maven将依赖依赖打包到jar中

    通过maven-assembly-plugin插件可以实现将依赖jar包打包到自己的jar包中的需求,只需要在pom.xml中配置该插件即可,配置如下: <build> <plugi ...

  3. Python __exit__,__enter__函数with语句的组合应用

    __exit__,__enter__函数with语句的组合应用   by:授客 QQ:1033553122 简介 设计对象类时,我们可以为对象类新增两个方法,一个是__enter(self)__,一个 ...

  4. Visual Studio未能加载“XX”包的解决方案

    1.打开命令行(管理员) 2.进入到devenv.exe所在的目录u 3.输入devenv,会出现帮助提示 4.将所有带“Reset..”的命令执行一遍 5.OK 我尝试过使用修复功能,貌似没有作用. ...

  5. Pycharm启动后加载anaconda一直updating indices造成Pycharm闪退甚至电脑崩溃

    可能跟anaconda文件夹有一定关系 网上找找解决方案,似乎很多人有同样的困扰! 知乎-pycharm启动后总是不停的updating indices...indexing? stackoverfl ...

  6. SQL Server将一列的多行内容拼接成一行

    昨天遇到一个SQL Server的问题:需要写一个储存过程来处理几个表中的数据,最后问题出在我想将一个表的一个列的多行内容拼接成一行 比如表中有两列数据 : ep_classes  ep_name A ...

  7. 【MM系列】SAP库龄报表逻辑理解

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[MM系列]SAP库龄报表逻辑理解   第一篇 ...

  8. Android Studio无线连调式android手机

    两种方法: 一.打开命令行或者Terminal窗口, 运行  adb connect 192.168.10.163:5555  来通过wifi连接手机调试 IP地址查看手机wifi的ip  要求手机和 ...

  9. echo 1+2+"3+4+5“输出的结果是6

    如上,为什么echo 1+2+"3+4+5"输出的结果是6呢?刚开始我也不是很明白,以为有问题,但在电脑上运行程序的时候,结果出现6 了.这让我更加疑惑不解.现将问题解释一番. 在 ...

  10. ctf学习(web题二)

    web 下面是做bugku上一些web的总结 内容链接