博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BZOJ 3159: 决战 解题报告
阅读量:5101 次
发布时间:2019-06-13

本文共 1807 字,大约阅读时间需要 6 分钟。

BZOJ 3159: 决战

1 sec 512MB

题意:

给你一颗\(n\)个点,初始点权为\(0\)的有跟树,要求支持

  • Increase x y w 将路径\(x\)\(y\)所有点点权加上\(w\)
  • Sum x y 询问路径\(x\)\(y\)的点权和
  • Major x y 询问从路径\(x\)\(y\)最大点权
  • Minor x y 询问最小点权
  • Invert x y 将路径上的点权翻转

有个性质,修改操作一定满足\(x\)\(y\)祖先或者\(y\)\(x\)祖先(实际没什么用处)

\(n\le 50000,|w|\le 1000\)

输入格式

第一行有三个整数\(N\)\(M\)\(R\),分别表示树的节点数、指令和询问总数,以及树的跟。

接下来\(N-1\)行,每行两个整数\(u\)\(v\),表示一条边。

接下来\(M\)行,每行描述一个指令或询问,格式见题意描述。

输出格式

对于每个询问操作,输出所求的值。


老年菜鸡选手实在写不动大数据结构题...

有两个做法,暂时只写了一种,有可能一会儿会把另一种补充一下。

考虑树链剖分,但是不能维护翻转

考虑平衡树可以维护翻转

于是我们可以拿平衡树维护树剖的每条链

然后每次修改只有\(\log\)条链,我们把每条链要修改的地方拎出来,然后塞到一个平衡树里面,打一个翻转tag,再塞回去就可以了

用fhqtreap实现起来比较方便

说起来蛮简单,写起来还是蛮难受的的


Code:

#include 
#include
#include
#include
#define ll long longconst int SIZE=1<<21;char ibuf[SIZE],*iS,*iT;//#define gc() (iS==iT?(iT=(iS=ibuf)+fread(ibuf,1,SIZE,stdin),iS==iT?EOF:*iS++):*iS++)#define gc() getchar()template
void read(T &x){ int f=0;x=0;char c=gc(); while(!isdigit(c)) f|=c=='-',c=gc(); while(isdigit(c)) x=x*10+c-'0',c=gc(); if(f) x=-x;}void reads(char *s){ int k=0;char c=gc(); while(c<'A'||c>'Z') c=gc(); while((c>='a'&&c<='z')||(c>='A'&&c<='Z')) s[k++]=c,c=gc();}const int N=5e4+10;inline void ckmax(int &x,int y){x=x>y?x:y;}inline void ckmin(int &x,int y){x=x
dep[top[y]]) { ret+=querysum(num[x],1,rk[x]); x=par[top[x]]; } else { ret+=querysum(num[y],1,rk[y]); y=par[top[y]]; } } if(dep[x]
dep[top[y]]) { ckmax(ret,querymx(num[x],1,rk[x])); x=par[top[x]]; } else { ckmax(ret,querymx(num[y],1,rk[y])); y=par[top[y]]; } } if(dep[x]
dep[top[y]]) { ckmin(ret,querymi(num[x],1,rk[x])); x=par[top[x]]; } else { ckmin(ret,querymi(num[y],1,rk[y])); y=par[top[y]]; } } if(dep[x]

2019.5.22

转载于:https://www.cnblogs.com/butterflydew/p/10907764.html

你可能感兴趣的文章
【Luogu1303】【模板】A*B Problem
查看>>
慵懒中长大的人,只会挨生活留下的耳光
查看>>
HTML——校友会(bootstrap)
查看>>
【分布计算环境学习笔记】2 分布式系统中的面向对象技术
查看>>
Enable SSH Server
查看>>
如何终止线程的运行(C/C++)
查看>>
"远程桌面连接--“发生身份验证错误。要求的函数不受支持
查看>>
【BZOJ1565】 植物大战僵尸
查看>>
视频:"我是设计师"高清完整版Plus拍摄花絮
查看>>
sicp solutions
查看>>
VALSE2019总结(4)-主题报告
查看>>
浅谈 unix, linux, ios, android 区别和联系
查看>>
PhotoZoom放大图片,真的能无损吗?
查看>>
转载分享移动网站最佳实践
查看>>
spark--环境搭建--4.ZooKeeper345集群搭建
查看>>
Codeforces Round #426 (Div. 2) C. The Meaningless Game
查看>>
51nod 1428 活动安排问题 (贪心+优先队列)
查看>>
leetcode - Next Permutation
查看>>
C#创建Windows服务程序
查看>>
Spring Boot 2.0系列文章(五):Spring Boot 2.0 项目源码结构预览
查看>>