分析

考虑直接用倍增跳会TLE,设\(f[x][i]\)表示以\(x\)为起点每次跳\(i\)步的点权和,

这可以预处理出来,综合一下两种做法,当\(i>\sqrt{n}\)时直接上倍增,否则预处理\(f\)即可

如果用长链剖分求树上\(k\)级祖先那么就可以去掉\(\log\)

代码

#include

#include

#define rr register

using namespace std;

const int N=50011,M=224;

typedef long long lll; lll g[N][M];

struct node{int y,next;}e[N<<1];

int f[N][16],n,LCA[N],a[N],b[N],p[N],as[N],et=1,F[M],dep[N];

inline signed iut(){

rr int ans=0,f=1; rr char c=getchar();

while (!isdigit(c)) f=(c=='-')?-f:f,c=getchar();

while (isdigit(c)) ans=(ans<<3)+(ans<<1)+(c^48),c=getchar();

return ans*f;

}

inline void print(lll ans){

if (ans>9) print(ans/10);

putchar(ans%10+48);

}

inline void dfs(int x,int fa){

f[x][0]=fa,F[0]=x,dep[x]=dep[fa]+1;

for (rr int i=1;i<16&&f[x][i-1];++i)

f[x][i]=f[f[x][i-1]][i-1];

for (rr int i=1;i

for (rr int i=1;i

for (rr int i=as[x];i;i=e[i].next)

if (e[i].y!=fa) dfs(e[i].y,x);

}

inline signed lca(int x,int y){

if (dep[x]

for (rr int i=15;~i;--i)

if (dep[f[x][i]]>=dep[y]) x=f[x][i];

if (x==y) return x;

for (rr int i=15;~i;--i)

if (f[x][i]!=f[y][i])

x=f[x][i],y=f[y][i];

return f[x][0];

}

inline signed Get(int x,int y){

for (rr int i=15;~i;--i)

if ((y>>i)&1) x=f[x][i];

return x;

}

inline lll answ(int x,int LCA,int y,int P){

rr lll ans=0;

if (P>=M){

ans+=a[x];

for (;dep[x]-P>=dep[LCA];)

ans+=a[x=Get(x,P)];

rr int now=dep[x]-dep[LCA];

if (now&&P-now>dep[y]-dep[LCA]) ans+=a[y];

else{

x=Get(y,dep[y]-dep[LCA]-P*(now>0)+now);

if (x!=LCA) ans+=a[x];

for (;dep[x]+P<=dep[y];)

x=Get(y,dep[y]-dep[x]-P),ans+=a[x];

if (x!=y) ans+=a[y];

}

}else{

rr int step=(dep[x]-dep[LCA])/P;

ans+=g[x][P]-g[Get(x,(step+1)*P)][P];

rr int now=dep[x]-dep[LCA]-P*step;

if (now&&P-now>dep[y]-dep[LCA]) ans+=a[y];

else{

x=Get(y,dep[y]-dep[LCA]-P*(y!=LCA)+now);

step=(dep[y]-dep[x])/P;

rr int t=Get(y,dep[y]-dep[x]-step*P);

if (t!=LCA) ans+=g[t][P]-g[Get(x,P)][P];

if (t!=y) ans+=a[y];

}

}

return ans;

}

signed main(){

n=iut();

for (rr int i=1;i<=n;++i) a[i]=iut();

for (rr int i=1;i

rr int x=iut(),y=iut();

e[++et]=(node){y,as[x]},as[x]=et;

e[++et]=(node){x,as[y]},as[y]=et;

}

dfs(1,0);

for (rr int i=1;i<=n;++i) b[i]=iut();

for (rr int i=1;i

for (rr int i=1;i

return 0;

}

poi word转html 根号,#根号分治,树上倍增#洛谷 3591 [POI2015]ODW相关推荐

  1. 分治——南蛮图腾(洛谷 P1498)

    题目选自洛谷P1498 把杨辉三角对2取模输出看下结果,这是12行内的结果: 11 1 1 0 1 1 1 1 1 1 0 0 0 1 1 1 0 0 1 1 1 0 1 0 1 0 1 1 1 1 ...

  2. 洛谷 P3258 [JLOI2014]松鼠的新家 树上差分

    缘起 [1]中我们学习了树上差分,并且a了一个裸的点差分. 现在继续树上差分~ 洛谷 P3258 [JLOI2014]松鼠的新家 分析 题目描述 松鼠的新家是一棵树,前几天刚刚装修了新家,新家有n个房 ...

  3. POI Word 模板 文字 图片 替换

    POI Word 模板 文字 图片 替换 博客分类: java poi POIjavaWOrd  实验环境:POI3.7+Word2007 Word模板: 替换后效果: 代码: 1.入口文件 Java ...

  4. java poi 段落行间距,Apache POI Word - 段落( Paragraph)

    Apache POI Word - 段落( Paragraph) 在本章中,您将学习如何创建段落以及如何使用Java将其添加到文档中. 段落是Word文件中页面的一部分. 完成本章后,您将能够创建段落 ...

  5. Java Poi word 插入图片并添加边框

    Java Poi word 插入图片并添加边框 //得到Picture的Base64编码 Base64Picture p1; //打开Word文件 Resource resource = new Cl ...

  6. java poi word导出

    java poi word导出 (含有文字,图像) 导出word效果如下: 思路:建立预期导出word效果,设置为模板,然后填充对应信息,注意,加粗,居中等一些图片,文字格式预先设置好.然后进行文字或 ...

  7. poi word操作之XWPFTable合并单元格

    poi word操作之XWPFTable合并单元格 需要注意,要合并的单元格最好不要有其他的合并样式. 跨列合并单元格 /** * @Description: 跨列合并 * table要合并单元格的表 ...

  8. poi word操作之向单元格内添加图片

    poi word操作之向单元格内添加图片 1,主要难点: poi word操作之向单元格内添加图片考虑的点: 1)考虑图片在单元格内的占比(动态的调整图片在文档中的宽高) 2,解决步骤 1)首先需要获 ...

  9. POI Word 图表、柱状图、条形图、折线图、饼图

    poi Excel 图表:https://blog.csdn.net/u014644574/article/details/105695787 1.pom.xml <dependency> ...

最新文章

  1. 学习Mybatis与mysql数据库的示例笔记
  2. Android内核开发:系统编译输出的镜像文件
  3. css圆角矩形及去掉空格属性
  4. MySQL 中的重做日志,回滚日志以及二进制日志的简单总结
  5. neo4j cypher_neo4j / cypher:悬挂查询参数
  6. python selenium循环判断元素是否存在_检查Python Selenium是否存在元素
  7. 根据 HTML 规范,以下代码中,外层容器 .outer 的宽高分别是:
  8. Javascript取select的选中值和文本
  9. python中的json结构_python数据挖掘_Json结构分析
  10. 傲云浏览器linux,Centos7安装部署zabbix监控软件
  11. 谷歌提出深度CNN模型NIMA:帮你挑选清晰且有美感的图片
  12. 【蜕变之路】第31天 Spring Tool Suite和IntelliJ (2019年3月21日)
  13. linux账户管理代码和截图,linux 用户管理(示例代码)
  14. 计算机坐标公式,经纬度换算坐标公式(经纬度转大地坐标公式)
  15. 阿里云弹性云桌面解决方案、高性能GPU型云桌面用于设计、建模、影视制作
  16. Windows搭建邮件服务器,实现收发邮件(对第三方邮箱,例如QQ邮箱等)
  17. Python爬取Google图片(2021.11.21编写)
  18. 基于Dragonboard 410c设计的智能管家
  19. knn matting matlab,一键抠图,毛发毕现:这个GitHub项目助你快速PS
  20. java后台将数据导出到Excel表格

热门文章

  1. matlab加速度转化为位移,科学网—Matlab编写由加速度积分得到速度和位移函数 - 王德才的博文...
  2. 基于Java毕业设计疫情社区志愿者组织的资源管理平台源码+系统+mysql+lw文档+部署软件
  3. java 20008年月历输出 日期的个位与星期数相等 的日子
  4. 利用alias自定义快捷命令
  5. thinkphp 面包屑导航
  6. AspNetPager属性
  7. 目标检测论文解读复现之五:改进YOLOv5的SAR图像舰船目标检测
  8. Windows虚拟内存
  9. 响应式布局以及提交网站
  10. EDFA的原理以及仿真