【刷题】BZOJ 4543 [POI2014]Hotel加强版
Description
同OJ3522
数据范围:n<=100000
Solution
dp的设计见【刷题】BZOJ 3522 [Poi2014]Hotel
然后发现dp的第二维与深度有关,于是长链剖分就可以优化成 \(O(n)\) 的了
不会写指针,所以写deque
#include<bits/stdc++.h>
#define ui unsigned int
#define ll long long
#define db double
#define ld long double
#define ull unsigned long long
#define REP(a,b,c) for(register int a=b,a##end=c;a<=a##end;++a)
#define DEP(a,b,c) for(register int a=b,a##end=c;a>=a##end;--a)
const int MAXN=100000+10;
int n,e,to[MAXN<<1],nex[MAXN<<1],beg[MAXN],dep[MAXN],Mxdep[MAXN],hson[MAXN],top[MAXN],id[MAXN],cnt;
ll ans;
std::deque<int> f[MAXN],g[MAXN];
template<typename T> inline void read(T &x)
{
	T data=0,w=1;
	char ch=0;
	while(ch!='-'&&(ch<'0'||ch>'9'))ch=getchar();
	if(ch=='-')w=-1,ch=getchar();
	while(ch>='0'&&ch<='9')data=((T)data<<3)+((T)data<<1)+(ch^'0'),ch=getchar();
	x=data*w;
}
template<typename T> inline void write(T x,char ch='\0')
{
	if(x<0)putchar('-'),x=-x;
	if(x>9)write(x/10);
	putchar(x%10+'0');
	if(ch!='\0')putchar(ch);
}
template<typename T> inline void chkmin(T &x,T y){x=(y<x?y:x);}
template<typename T> inline void chkmax(T &x,T y){x=(y>x?y:x);}
template<typename T> inline T min(T x,T y){return x<y?x:y;}
template<typename T> inline T max(T x,T y){return x>y?x:y;}
inline void insert(int x,int y)
{
	to[++e]=y;
	nex[e]=beg[x];
	beg[x]=e;
}
inline void dfs1(int x,int p)
{
	dep[x]=dep[p]+1;Mxdep[x]=dep[x];hson[x]=x;
	for(register int i=beg[x];i;i=nex[i])
		if(to[i]==p)continue;
		else
		{
			dfs1(to[i],x);
			if(Mxdep[to[i]]>Mxdep[x])Mxdep[x]=Mxdep[to[i]],hson[x]=to[i];
		}
}
inline void dfs2(int x,int p,int tp)
{
	top[x]=tp;
	if(hson[x]!=x)dfs2(hson[x],x,tp);
	for(register int i=beg[x];i;i=nex[i])
		if(to[i]==p||to[i]==hson[x])continue;
		else dfs2(to[i],x,to[i]);
}
inline void dfs(int x,int p)
{
	if(hson[x]==x)
	{
		id[x]=++cnt;
		f[id[x]].resize(dep[x]-dep[top[x]]+1);
		g[id[x]].resize(dep[x]-dep[top[x]]+1);
		f[id[x]][0]=1;
		return ;
	}
	dfs(hson[x],x);
	id[x]=id[hson[x]];
	f[id[x]].push_front(1);f[id[x]].pop_back();
	g[id[x]].push_back(0);g[id[x]].pop_front();
	ans+=g[id[x]][0];
	for(register int i=beg[x];i;i=nex[i])
		if(to[i]==p||to[i]==hson[x])continue;
		else
		{
			dfs(to[i],x);
			REP(j,0,Mxdep[to[i]]-dep[to[i]]+1)
			{
				ans+=f[id[x]][j]*g[id[to[i]]][j+1]+(j?f[id[to[i]]][j-1]*g[id[x]][j]:0);
				g[id[x]][j]+=g[id[to[i]]][j+1]+(j?f[id[x]][j]*f[id[to[i]]][j-1]:0);
				if(j)f[id[x]][j]+=f[id[to[i]]][j-1];
			}
			while(!f[id[to[i]]].empty())f[id[to[i]]].pop_back();
			while(!g[id[to[i]]].empty())g[id[to[i]]].pop_back();
		}
}
int main()
{
	read(n);
	REP(i,1,n-1)
	{
		int u,v;read(u);read(v);
		insert(u,v);insert(v,u);
	}
	dfs1(1,0);dfs2(1,0,1);dfs(1,0);
	write(ans,'\n');
	return 0;
}
【刷题】BZOJ 4543 [POI2014]Hotel加强版的更多相关文章
- BZOJ.4543.[POI2014]Hotel加强版(长链剖分 树形DP)
		题目链接 弱化版:https://www.cnblogs.com/SovietPower/p/8663817.html. 令\(f[x][i]\)表示\(x\)的子树中深度为\(i\)的点的个数,\( ... 
- bzoj 4543: [POI2014]Hotel加强版
		Description 给出一棵树求三元组 \((x,y,z)\,,x<y<z\) 满足三个点两两之间距离相等,求三元组的数量 Solution 考虑暴力 \(DP\) 设 \(f[i][ ... 
- 4543: [POI2014]Hotel加强版
		4543: [POI2014]Hotel加强版 链接 分析: f[u][i]表示子树u内,距离u为i的点的个数,g[u][i]表示在子树u内,已经选了两个深度一样的点,还需要在距离u为i的一个点作为第 ... 
- BZOJ3522&4543 [POI2014]Hotel加强版  长链剖分
		上上周见fc爷用长链剖分秒题 于是偷偷学一学 3522的数据范围很小 可以暴力枚举每个点作为根节点来dp 复杂度$O(n^2)$ 考虑令$f[x][j]$表示以$x$为根的子树内距离$x$为$j$的点 ... 
- BZOJ4543 POI2014 Hotel加强版 【长链剖分】【DP】*
		BZOJ4543 POI2014 Hotel加强版 Description 同OJ3522 数据范围:n<=100000 Sample Input 7 1 2 5 7 2 5 2 3 5 6 4 ... 
- 【BZOJ4543】[POI2014]Hotel加强版 长链剖分+DP
		[BZOJ4543][POI2014]Hotel加强版 Description 同OJ3522数据范围:n<=100000 Sample Input 7 1 2 5 7 2 5 2 3 5 6 ... 
- BZOJ4543 [POI2014]Hotel加强版
		题意 有一个树形结构,每条边的长度相同,任意两个节点可以相互到达.选3个点.两两距离相等.有多少种方案? 数据范围:n<=100000 分析 参照小蒟蒻yyb的博客. 我们先考虑一个\(O(n^ ... 
- bzoj4543 [POI2014]Hotel加强版   长链剖分+树形DP
		题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=4543 题解 这道题的弱化版 bzoj3522 [POI2014]Hotel 的做法有好几种吧. ... 
- 【刷题】BZOJ 3522 [Poi2014]Hotel
		Description 有一个树形结构的宾馆,n个房间,n-1条无向边,每条边的长度相同,任意两个房间可以相互到达.吉丽要给他的三个妹子各开(一个)房(间).三个妹子住的房间要互不相同(否则要打起来了 ... 
随机推荐
- js 函数作为参数+接受任意数量参数
			javascript中的函数是“复合数据类型”,又成为“引用类型”.引用类型的变量指向存储单元中存放的是它们的实际存放地址.函数名是对函数的一种引用.var a=max_num ;a()就可以调用fu ... 
- BZOJ4999: This Problem Is Too Simple!树链剖分+动态开点线段树
			题目大意:将某个节点的颜色变为x,查询i,j路径上多少个颜色为x的点... 其实最开始一看就是主席树+树状数组+DFS序...但是过不去...MLE+TLE BY FCWWW 其实树剖裸的一批...只 ... 
- WPF Style
			<Application x:Class="WzlyTool.App" xmlns="http://schemas.microsoft.com/winfx/20 ... 
- 20155316 《网络对抗》Exp8 Web基础
			实验内容 实验1:Web前端HTML 能正常安装.启停Apache.理解HTML,理解表单,理解GET与POST方法,编写一个含有表单的HTML. 1.开启Apache服务 思路:使用service ... 
- 20155334 《网络攻防》 Exp9 Web安全基础
			<网络攻防> Exp9 Web安全基础 一.实验后回答问题 SQL注入攻击原理,如何防御: 原理: 就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服 ... 
- 10、MySQL 的复制
			10.1 复制的概述 10.2 配置复制 10.3 复制的原理 有两种 1.基于sql语句的复制:传输数据少(sql语句文件),就能复制大量的数据,不过由于一些自定义的函数问题,会有一些限制: 2.基 ... 
- S5PV210  DDR2初始化  28个步骤总结
			看了一套视频,感觉DDR这个部分将的非常细致也很好,于是把视频内容花了一个多星期作了总结. 这个视频就是不知道是谁讲的,做好事不留名啊---那位知道告诉我哈-- 平台:S5PV210 DDR: 兼容 ... 
- GAN初步——本质上就是在做优化,对于生成器传给辨别器的生成图片,生成器希望辨别器打上标签 1,体现在loss上!
			from:https://www.sohu.com/a/159976204_717210 GAN 从 2014 年诞生以来发展的是相当火热,比较著名的 GAN 的应用有 Pix2Pix.CycleGA ... 
- java 对象是可以判空的
			比如这里存xml,这里判断了一下element是否为空,来避免空指针异常,推荐用guava的optional判空 
- 定制 input[type="radio"] 和 input[type="checkbox"] 样式
			表单中,经常会使用到单选按钮和复选框,但是,input[type="radio"] 和 input[type="checkbox"] 的默认样式在不同的浏览器或 ... 
