昨天发了个暴力做法,今天发个nlogn做法.

poj1330需要稍作改动.

#include<stdio.h>
int f[100001][18];//倍增,f[i][j]表示以i为起点跳2^j步的父亲.
int level[100001];//表示i点的层数是多少
int ans[100001][50];//ans[i][j]表示第i点有第j个儿子.
int idx[100001],tmp;
int dfs(int i)
{level[i]=level[f[i][0]]+1;//倍增更新层数for(int j=1;j<17;j++)f[i][j]=f[f[i][j-1]][j-1];//动规方程(核心)for(int j=idx[i];j>0;j--)dfs(ans[i][j]);//注意调用dfs那里,如果f[i][0]=0,说明这个点是总根.
}
int lca(int a,int b)
{if(level[a]<level[b])tmp=a,a=b,b=tmp;int deep=level[a]-level[b];for(int i=0;i<17;i++){if((deep&(1<<i))!=0)a=f[a][i];}//先让层数浅的跳到层数深的地方.if(a==b)return a;//一样的话,a或b就是LCA;for(int j=16;j>=0;j--){if(f[a][j]!=f[b][j])a=f[a][j],b=f[b][j];}return f[a][0];//这次跳到不是他们共同父亲的地方,所以是a或b的下一个.
}
int main()
{int n,m,a,b,x,y;scanf("%d%d",&n,&m);for(int i=1;i<n;i++){scanf("%d%d",&a,&b);f[b][0]=a;ans[a][++idx[a]]=b;}for(int i=1;i<=n;i++){if(f[i][0]==0){dfs(i);break;}}for(int i=1;i<=m;i++){scanf("%d%d",&x,&y);printf("%d\n",lca(x,y));//下面的就不解释了}
}

poj1330,JDOJ3055O(nlogn)做法相关推荐

  1. Leetcode1713. 得到子序列的最少操作次数[C++题解]:LCS转化成LIS,转化为nlogn做法

    文章目录 本题分析 题目链接 本题分析 本题难在问题转换上. [问题转化1]转化为求两个序列最长公共子序列(LCS)的长度. 然后target 的长度减去 公共子序列的长度,就是答案. 本题数据规模是 ...

  2. 牛客练习赛81 B. 小 Q 与彼岸花(FWT nlogn做法)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Weblink https://ac.nowcoder.com/acm/contest/11171/B ...

  3. 关于简单动态规划(Dynamic Programming)的总结

    Instructions 综上所述(好像没有上)我的DP真的垃圾的一批... 动态规划是用来避免重复计算状态导致效率低的情况,实现动规有记忆化搜索和填表两种方法,但记忆化搜索不能优化空间,所以常用的是 ...

  4. 最长上升子序列(LIS)算法

    LIS定义 LIS(Longest Increasing Subsequence)最长上升子序列  一个数的序列bi,当b1 < b2 < - < bS的时候,我们称这个序列是上升的 ...

  5. [矩形并-扫描线-线段树]Picture

    最近在补数学和几何,没啥好写的,因为已经决定每天至少写一篇了,今天随便拿个题水水. 题目大意:给你N个边平行于坐标轴的矩形,求它们并的周长.(N<=5000) 思路:这个数据范围瞎暴力就过了,但 ...

  6. P2896 [USACO08FEB]一起吃饭Eating Together 解题报告

    题目传送门 题目不是很难,看了一会就想到了,但因为一些细节WA了好几遍qwq 但代码却一点一点压短了(看了别人的精简写法) 题目分析 把一个序列改成不上升或不下降子序列,求最少修改次数. 一般情况有求 ...

  7. 听说下雨天,子序列和孤单的你更配哦~

    一.\(DP\)的意义以及线性动规简介 动态规划自古以来是\(DALAO\)凌虐萌新的分水岭,但有些OIer认为并没有这么重要--会打暴力,大不了记忆化.但是其实,动态规划学得好不好,可以彰显出一个\ ...

  8. 字节AI LAB NLP算法二面凉+被捞后通过

    作者 | 113767074 整理 | NewBeeNLP 面试锦囊之面经分享系列,持续更新中  欢迎后台回复『面试』加入讨论组交流噢  一面 能感觉到面试官是个水平贼高的人 对machine lea ...

  9. 【UTR #1】ydc的大树

    [UTR #1]ydc的大树 全网唯一一篇题解我看不懂 所以说一下我的O(nlogn)做法: 以1号点为根节点 一个黑点如果有多个相邻的节点出去都能找到最远的黑点,那么这个黑点就是无敌的 所以考虑每个 ...

最新文章

  1. windows stack based overflow
  2. linux远程登录x11,windows linux 通过SSH X11Forwrding 使用图形化界面
  3. 可长点心吧-sort
  4. boost::hana::hash用法的测试程序
  5. [Swift]LeetCode1118. 一月有多少天 | Number of Days in a Month
  6. 2021 ISC会上山石网科重磅发布智能下一代防火墙A系列,重新定义边界安全防御
  7. 远程Redis服务器 JedisConnectionException: Failed connecting to host localhost:6379 解决方案
  8. python数字转中文字符_python数字金额转换为中文大写金额
  9. 句法分析(成分句法分析)(依存句法分析)
  10. 计算机音乐谱子 追光者,精选追光者简谱
  11. TFTPD32无法传输
  12. 02-2017.07-计算机设计大赛《盲人的眼睛》
  13. MATLAB算法实战应用案例精讲-【深度学习】扩散模型(DM)(补充篇)
  14. crontab指定时间
  15. git之pull与push
  16. Android 开机动画(bootanimation)启动
  17. 512mb内存linux,linux 内存详解
  18. 11、有线接入网技术
  19. xzfnz.fsj.kzxf.xkjf你的反馈没看到房间内了覆盖面,发
  20. 计算机综合布线考试试题A,答案_网络综合布线期末考试A卷.doc

热门文章

  1. android 自定义侧边栏,android界面设计(一)侧边栏的两种实现方式
  2. intra-mart知识
  3. 孙鑫Lesson2 grammer
  4. 拆解IncServer网络库
  5. 20145204 张亚军《信息安全系统设计基础》第12周学习总结
  6. Maven3.5.3下载安装与环境配置
  7. Fabric 系统链码
  8. 数据库并发问题和事务隔离界别
  9. java 实体转map
  10. ubuntu 常见错误--Could not get lock /var/lib/dpkg/lock