【BZOJ4543】【POI2014】Hotel加强版(长链剖分)

传送门

题意:求树上满足三点之间距离两两相等的三元组个数

n≤1e5n\le 1e5n1e5

原题数据是n≤5000n\le5000n5000

考虑怎么做
f[u][i]f[u][i]f[u][i]表示uuu为根,深度为iii的点的个数
g[u][i]g[u][i]g[u][i]表示uuu为根,满足2点到lcalcalca的距离减去lcalcalcauuu的距离为iii,即dep[x]+dep[y]−3∗deplca=idep[x]+dep[y]-3*dep_{lca}=idep[x]+dep[y]3deplca=i的点对个数
换句话说就是还差iii个距离满足能凑成333元组的点对个数


ans+=g[u][i+1]∗f[v][i];ans+=g[u][i+1]*f[v][i];ans+=g[u][i+1]f[v][i];
ans+=f[u][i−1]∗g[v][i];ans+=f[u][i-1]*g[v][i];ans+=f[u][i1]g[v][i];
g[u][i+1]+=f[u][i+1]∗f[v][i];g[u][i+1]+=f[u][i+1]*f[v][i];g[u][i+1]+=f[u][i+1]f[v][i];
f[u][i+1]+=f[v][i];f[u][i+1]+=f[v][i];f[u][i+1]+=f[v][i];
g[u][i−1]+=g[v][i];g[u][i-1]+=g[v][i];g[u][i1]+=g[v][i];

这式子很显然吧
发现转移的时候
f[u][i+1]+=f[v][i];f[u][i+1]+=f[v][i];f[u][i+1]+=f[v][i];
g[u][i−1]+=g[v][i];g[u][i-1]+=g[v][i];g[u][i1]+=g[v][i];
既然只和深度有关,
就可以愉快的长链剖分了

复杂度O(n)O(n)O(n)
据说可以点分O(nlogn)O(nlogn)O(nlogn)
关我p事

#include<bits/stdc++.h>
using namespace std;
const int RLEN=1<22|1;
#define ll long long
inline char gc(){static char ibuf[RLEN],*ob,*ib;(ob==ib)&&(ob=(ib=ibuf)+fread(ibuf,1,RLEN,stdin));return (ib==ob)?EOF:*ib++;
}
inline int read(){char ch=gc();int res=0,f=1;while(!isdigit(ch)){if(ch=='-')f=-f;ch=gc();}while(isdigit(ch))res=(res+(res<<2)<<1)+(ch^48),ch=gc();return res*f;
}
const int N=1000005;
ll *f[N],*g[N],*id,tmp[N<<2],ans;
int n,adj[N],nxt[N<<1],to[N<<1],dep[N],son[N],cnt;
inline void addedge(int u,int v){nxt[++cnt]=adj[u],adj[u]=cnt,to[cnt]=v;
}
void dfs1(int u,int fa){for(int e=adj[u];e;e=nxt[e]){int v=to[e];if(v==fa)continue;dfs1(v,u);if(dep[v]>dep[son[u]])son[u]=v;}dep[u]=dep[son[u]]+1;
}
void dfs2(int u,int fa){if(son[u]){f[son[u]]=f[u]+1,g[son[u]]=g[u]-1,dfs2(son[u],u);}f[u][0]=1;ans+=g[u][0];for(int e=adj[u];e;e=nxt[e]){int v=to[e];if(v==fa||v==son[u])continue;f[v]=id,id+=dep[v],g[v]=id+dep[v],id+=dep[v]*2;dfs2(v,u);for(int i=dep[v]-1;~i;i--){ans+=g[u][i+1]*f[v][i];if(i)ans+=f[u][i-1]*g[v][i];g[u][i+1]+=f[u][i+1]*f[v][i];f[u][i+1]+=f[v][i];}for(int i=dep[v]-1;i;i--){g[u][i-1]+=g[v][i];}}
}
int main(){n=read();for(int i=1;i<n;i++){int u=read(),v=read();addedge(u,v),addedge(v,u);}dfs1(1,0);id=tmp;f[1]=id,id+=dep[1],g[1]=id+dep[1],id+=dep[1]*2;dfs2(1,0);cout<<ans;
}

转载于:https://www.cnblogs.com/stargazer-cyk/p/11145583.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/449359.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用vue+webpack从零搭建项目

vue到现在已经成为一个热门的框架&#xff0c;在项目实践当中&#xff0c;如果想要创建一个新项目&#xff0c;通常都会使用vue-cli的脚手架工具&#xff0c;毋容置疑能够方便很多&#xff0c;很多东西也不需要自己亲自去配置。都知道&#xff0c;脚手架其实是vue结合webpack去…

CentOS 6 和 CentOS 7 防火墙的关闭

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。CentOS6.5查看防火墙的状态&#xff1a; 1[linuxidclocalhost ~]$service iptable status显示结果&#xff1a; 12345[linuxidclocalhost …

怎样从Linux终端管理进程:10个你必须知道的命令

本文由 极客范 - Ben Zhang 翻译自 Chris Hoffman。欢迎加入极客翻译小组&#xff0c;同我们一道翻译与分享。转载请参见文章末尾处的要求。Linux终端有一系列有用的命令。它们可以显示正在运行的进程、杀死进程和改变进程的优先级。本文列举了一些经典传统的命令和一些有用新…

易盛极星多合约回测(问题很多)

注意&#xff0c;使用此函数&#xff0c;在考虑手续费时&#xff0c;无法做到统一。 import talib import numpy as np import EsTalib from EsSeries import NumericSeries# 策略参数字典 g_params[p1] 5 g_params[p2] 10 g_params[p3] 120 g_params[ZQ] 5 #交易周期…

Qt 程序获取程序所在路径、用户目录路径、临时文件夹等特殊路径的方法

Qt 程序获取程序所在路径、用户目录路径、临时文件夹等特殊路径的方法 经常我们的程序中需要访问一些特殊的路径&#xff0c;比如程序所在的路径、用户目录路径、临时文件夹等。在 Qt 中实现这几个功能所用的方法虽然都不难&#xff0c;但是各不相同&#xff0c;每次用到时还要…

搞了个30天学习量化的数据资料,可以bt做全球。数据链接白送

待会上传代码,资料,打包好了,拿来就能用。累死我了,搞了两天,必须收费,绝不允许白嫖。不然对不起我熬夜,那么辛苦。 确定后,扫描百度网盘 链接:https://pan.baidu.com/s/1C0k6zkjHchFVQaHe4nRMsg?pwd=kkgb 提取码:kkgb 如何回测k线图 如何根据形态选股

解决 springboot + JPA + MySQL 表名全大写 出现 “表不存在” 问题(Table ‘XXX.xxx‘ doesn‘t exist)

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 项目中使用 JPA 和 mysql 。表名是全大写的。 出现 如下报错&#xff1a; java.sql.SQLSyntaxErrorException: Table XXX_ms.work_tas…

自学Linux命令的四种方法

本文由 极客范 - 小道空空 翻译自 Danny Stieben。欢迎加入极客翻译小组&#xff0c;同我们一道翻译与分享。转载请参见文章末尾处的要求。如果你想成为Linux高手&#xff0c;那么掌握一些Linux命令是必不可少的。下面是自学Linux命令的四种方法。 每日提示 学习Linux命令的…

第五周学习总结

第六章&#xff1a; 主要内容: 1.接口 2.实现接口 3.理解接口 4.接口回调 5.接口与多态 6.接口变量做参数 7.面向接口编程 Example6_1: Example6_2: Example6_3: Example6_4: Example6_5: Example6_6: 总结&#xff1a;这章节没有较大问题&#xff0c;例题也都做了一遍。蛮顺利…

Android 设备的CPU类型(通常称为”ABIs”)

armeabiv-v7a: 第7代及以上的 ARM 处理器。2011年15月以后的生产的大部分Android设备都使用它.arm64-v8a: 第8代、64位ARM处理器&#xff0c;很少设备&#xff0c;三星 Galaxy S6是其中之一。armeabi: 第5代、第6代的ARM处理器&#xff0c;早期的手机用的比较多。x86: 平板、模…

国信证券学习系列(1)

软件不错&#xff0c;满足了我对股票&#xff0c;期货&#xff0c;期权的全部要求。而且数据可以提供下载&#xff0c;简直没话说了。 数据清洗问题&#xff0c;我其实很早以前就在思考这个问题&#xff0c;回测&#xff0c;到底在测什么&#xff1f;什么样的数据可以用来回测&…

JNA—JNI终结者

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 1.介绍 给大家介绍一个最新的访问本机代码的Java框架—JNA。 JNA(Java Native Access)框架是一个开源的Java框架&#xff0c;是SUN公司…

FIFO存储器

FIFO( First Input First Output)简单说就是指先进先出。由于微电子技术的飞速发展&#xff0c;新一代FIFO芯片容量越来越大&#xff0c;体积越来越小&#xff0c;价格越来越便宜。作为一种新型大规模集成电路&#xff0c;FIFO芯片以其灵活、方便、高效的特性&#xff0c;逐渐在…

通过8个技巧让你成为一个超强的Linux终端用户

本文由 极客范 - minejo 翻译自 Chris Hoffman。欢迎加入极客翻译小组&#xff0c;同我们一道翻译与分享。转载请参见文章末尾处的要求。使用Linux终端不仅仅是只输入命令。学习这些基本的技巧&#xff0c;你就会逐渐掌握Bash shell&#xff0c;这个在大多数Linux发行版上默认…

国信证券学习系列(2)

获取指数池&#xff1a; def init(ContextInfo):#设置股票池stock300 ContextInfo.get_stock_list_in_sector(沪深300)ContextInfo.stock300_weight {}stock300_symbol []stock300_weightlist [] ContextInfo.index_code ContextInfo.stockcode"."ContextInfo.m…

旅游服务商Bikego完成A轮融资,共建创投、马蜂窝投资

2月26日消息&#xff0c;近日Bikego宣布完成A轮融资&#xff0c;共建创投、北京马蜂窝之旅国际旅行社投资。目前金额尚未公开。 bikego领趣旅行成立于2016年&#xff0c;是一家目的地日游服务运营商。从内容切入&#xff0c;提供国内自由行客户的白天玩法解决方案&#xff0c;…

python-flask-1

https://askubuntu.com/questions/244641/how-to-set-up-and-use-a-virtual-python-environment-in-ubuntu 1. virtualenv安装 sudo apt-get install virtualenv sudo apt install virtualenvwrapper echo "source /usr/share/virtualenvwrapper/virtualenvwrapper.sh&quo…

JSch:Java Secure Channel -- java 代码实现 ssh 远程操作

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 JSch 是SSH2的一个纯Java实现。 它允许你连接到一个 sshd 服务器&#xff0c;使用端口转发&#xff0c;X11转发&#xff0c;文件传输等…

国信证券学习系列(3)

日内回转策略&#xff1a;做T策略 择时交易&#xff1a; if date[-8:-3] ! 14:55:if macd > 0 and macd_pre < 0:# 根据MACD>0则开仓,小于0则平仓if avaliable > df.iloc[-1, 0] * ContextInfo.Lots * 100:order_shares(ContextInfo.get_universe()[0], ContextIn…

时序数据库连载系列: 时序数据库一哥InfluxDB之存储机制解析

2019独角兽企业重金招聘Python工程师标准>>> InfluxDB 的存储机制解析 本文介绍了InfluxDB对于时序数据的存储/索引的设计。由于InfluxDB的集群版已在0.12版就不再开源&#xff0c;因此如无特殊说明&#xff0c;本文的介绍对象都是指 InfluxDB 单机版 1. InfluxDB 的…