洛谷 P3884 [JLOI2009]二叉树问题
题目
思路
深搜统计深度,倍增\(\text{LCA}\)求边数
\(Code\)
#include<iostream>
#include<cstring>
#include<string>
#include<cstdio>
#include<algorithm>
#define MAXN 100
#define max_(a,b) a>b?a:b;
using namespace std;
int n,cnt,head[MAXN],dep[MAXN],fa[MAXN][20],lg[MAXN];
int sum1,sum2,ans1,ans2[MAXN];
struct Edge{
	int next,to;
}edge[MAXN<<1];
inline int qpow(int a,int b){
	int ans=1,base=a;
	while(b){
		if(b&1) ans*=base;
		base*=base;
		b>>=1;
	}
	return ans;
}
inline void addedge(int from,int to){
	edge[++cnt].to=to,edge[cnt].next=head[from];
	head[from]=cnt;
}
inline int read(){
	int x=0;bool f=0;char c=getchar();
	while(c<'0'||c>'9'){if(c=='-')f=!f;c=getchar();}
	while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}
	return f?-x:x;
}
void dfs(int u,int father){
	dep[u]=dep[father]+1;
	ans2[dep[u]]++;
	ans1=max_(ans1,dep[u]);
	fa[u][0]=father;
	for(int i=head[u];i;i=edge[i].next){
		int x=edge[i].to;
		if(x!=father) dfs(x,u);
	}
}
void lca(int x,int y){
	if(dep[x]<dep[y]){
		while(dep[y]>dep[x]){
			sum2+=qpow(2,lg[dep[y]-dep[x]]-1);
			y=fa[y][lg[dep[y]-dep[x]]-1];
		}
	}else{
		while(dep[x]>dep[y]){
			sum1+=qpow(2,lg[dep[x]-dep[y]]-1);
			x=fa[x][lg[dep[x]-dep[y]]-1];
		}
	}
	if(x==y) return;
	for(int k=lg[dep[x]]-1;k>=0;--k){
		if(fa[x][k]!=fa[y][k]){
			sum1+=qpow(2,k),sum2+=qpow(2,k);
			x=fa[x][k],y=fa[y][k];
		}
	}
	sum1++,sum2++;
}
int main(){
	n=read();
	for(int i=1,u,v;i<n;++i){
		u=read(),v=read();
		addedge(u,v);
		addedge(v,u);
	}
	dfs(1,0);
	for(int i=1;(1<<i)<=n;++i){
		for(int j=1;j<=n;++j){
			fa[j][i]=fa[fa[j][i-1]][i-1];
		}
	}
	for(int i=1;i<=n;++i){
		lg[i]=lg[i-1]+(1<<lg[i-1]==i);
	}
	int ans=0;
	for(int i=1;i<MAXN;++i){
		if(ans2[i]>ans){
			ans=ans2[i];
		}
	}
	int u,v;
	u=read(),v=read();
	printf("%d\n%d\n",ans1,ans);
	lca(u,v);
	printf("%d\n",sum1*2+sum2);
	return 0;
}
洛谷 P3884 [JLOI2009]二叉树问题的更多相关文章
- 【洛谷P3884 [JLOI2009]】二叉树问题
		题目描述 如下图所示的一棵二叉树的深度.宽度及结点间距离分别为: 深度:4 宽度:4(同一层最多结点个数) 结点间距离: ⑧→⑥为8 (3×2+2=8) ⑥→⑦为3 (1×2+1=3) 注:结点间距离 ... 
- [洛谷P1040] 加分二叉树
		洛谷题目链接:加分二叉树 题目描述 设一个n个节点的二叉树tree的中序遍历为(1,2,3,-,n),其中数字1,2,3,-,n为节点编号.每个节点都有一个分数(均为正整数),记第i个节点的分数为di ... 
- 题解【洛谷P3884】[JLOI2009]二叉树问题
		题面 题解 这道题目可以用很多方法解决,这里我使用的是树链剖分. 关于树链剖分,可以看一下我的树链剖分学习笔记. 大致思路是这样的: 第\(1\)次\(dfs\)记录出每个点的父亲.重儿子.深度.子树 ... 
- 洛谷P3884 二叉树问题
		题目描述 如下图所示的一棵二叉树的深度.宽度及结点间距离分别为: 深度:\(4\) 宽度:\(4\)(同一层最多结点个数) 结点间距离: \(⑧→⑥为8 (3×2+2=8)\) \(⑥→⑦为3 (1× ... 
- 洛谷 P1305 新二叉树 Label:字符串的输出总是有惊喜
		题目描述 输入一串完全二叉树,用遍历前序打出. 输入输出格式 输入格式: 第一行为二叉树的节点数n. 后面n行,每一个字母为节点,后两个字母分别为其左右儿子. 空节点用*表示 输出格式: 前序排列的完 ... 
- 洛谷 P1040 加分二叉树
		题目描述 设一个n个节点的二叉树tree的中序遍历为(1,2,3,…,n),其中数字1,2,3,…,n为节点编号.每个节点都有一个分数(均为正整数),记第i个节点的分数为di,tree及它的每个子树都 ... 
- 洛谷 P1305 新二叉树
		P1305 新二叉树 题目描述 输入一串完全二叉树,用遍历前序打出. 输入输出格式 输入格式: 第一行为二叉树的节点数n. 后面n行,每一个字母为节点,后两个字母分别为其左右儿子. 空节点用*表示 输 ... 
- 洛谷P1040 加分二叉树(树形dp)
		加分二叉树 时间限制: 1 Sec 内存限制: 125 MB提交: 11 解决: 7 题目描述 设一个n个节点的二叉树tree的中序遍历为(l,2,3,...,n),其中数字1,2,3,...,n ... 
- 洛谷P1040 加分二叉树【记忆化搜索】
		题目链接:https://www.luogu.org/problemnew/show/P1040 题意: 某一个二叉树的中序遍历是1~n,每个节点有一个分数(正整数). 二叉树的分数是左子树分数乘右子 ... 
随机推荐
- 介绍ArcGIS中各种数据的打开方法——mdb(个人数据库)
			3.打开存储在Access GeoDatabase的要素类 使用工作空间打开一个Access库中的一个要素类. private void OpenWorkspaceFromFileAccess(str ... 
- DIV中的文字垂直并且水平居中的CSS
			.MsgPopup { height: 100px; line-height: 100px; text-align: center;} 
- nginx-1.12.0安装
			1.配置相关环境: yum install -y gcc glibc gcc-c++ zlib pcre-devel openssl-devel rewrite模块需要pcre库 ssl功能需要ope ... 
- 网络编程之 tcp服务器(一)
			1.创建套接字 2.bind绑定ip和port 作为服务方,ip port 应该是固定的,所以要绑定;客户端一般不绑定 3.listen使套接字变成监听套接字,即变为被动链接 4.accept等待客户 ... 
- WinRAR捆绑木马
			准备好木马文件 server.exe 准备一个小游戏 趣味数学计算 压缩 创建自解压格式压缩文件 自解压选项设置 解压路径设置 设置程序 模式设置 压缩完成 使用 开始玩游戏 
- 红米手机使用应用沙盒一键修改sdk信息
			前面文章介绍了怎么在安卓手机上安装激活XPOSED框架,XPOSED框架的极强的功能各位都介绍过,能不修改APK的前提下,修改系统内核的参数,打个比方在某些应用情景,各位需要修改手机的某个系统参数,这 ... 
- Objective-C中的@dynamic 、@synthesize
			Objective-C中的@dynamic 一.@dynamic与@synthesize的区别 @property有两个对应的词,一个是@synthesize,一个是@dynamic.如果@synth ... 
- Windows Server 2008 R2 + IIS 环境部署Asp.Net Core App
			Windows + IIS 环境部署Asp.Net Core App 环境:Windows Server 2012, IIS 8, Asp.Net Core 1.1. 不少人第一次在IIS中部署A ... 
- Flask入门很轻松 (二)
			转载请在文章开头附上原文链接地址:https://www.cnblogs.com/Sunzz/p/10959454.html 请求钩子 在客户端和服务器交互的过程中,有些准备工作或扫尾工作需要处理,比 ... 
- 定时任务模块——APScheduler
			一.概念: python定时任务框架,基于日期,固定时间间隔,crontab类型的任务,并且可以持久化任务,并能以deamon守护方式运行任务 二.简介: 安装:pip install apsched ... 
