博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
codeforces 502 g The Tree
阅读量:4580 次
发布时间:2019-06-09

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

题解:

一道优秀的题目

有几种做法:

1.维护后缀和

刚开始我想的是维护前缀和

然后用$sum[x]-sum[y]>=dep[x]-dep[y]$来做

但是这样子树赋值为0这个操作就很难进行了

因为你查找的是链上最小值,所以不改子树上面的节点是做不了的

那我们换一种方式,单点改,查询区间最大后缀和

这样子树染白的时候我们就可以在x处减去一个上面的最大后缀和,那么就对子树没有影响了

然后再把子树清空一下就可以

其实这个东西就是动态dp。。。

$$f(v)=max(f(x)-1,0)+v[v]$$

这个只用查询链

所以我们只需要维护$f[v]=MAX(f[top]必选时的最大值k1,任意情况最大值k2)$就可以了(v都是必选点)

 

#include 
using namespace std;#define rint register int#define IL inline#define rep(i,h,t) for(int i=h;i<=t;i++)#define dep(i,t,h) for(int i=t;i>=h;i--)#define ll long long#define me(x) memset(x,0,sizeof(x))#define mep(x,y) memcpy(x,y,sizeof(y))#define mid ((h+t)>>1)namespace IO{ char ss[1<<24],*A=ss,*B=ss; IL char gc() { return A==B&&(B=(A=ss)+fread(ss,1,1<<24,stdin),A==B)?EOF:*A++; } template
void read(T &x) { rint f=1,c; while (c=gc(),c<48||c>57) if (c=='-') f=-1; x=(c^48); while (c=gc(),c>47&&c<58) x=(x<<3)+(x<<1)+(c^48); x*=f; } char sr[1<<24],z[20]; ll Z,C1=-1; template
void wer(T x) { if (x<0) sr[++C1]='-',x=-x; while (z[++Z]=x%10+48,x/=10); while (sr[++C1]=z[Z],--Z); } IL void wer1() { sr[++C1]=' '; } IL void wer2() { sr[++C1]='\n'; } template
IL void maxa(T &x,T y) {
if (x
IL void mina(T &x,T y) {
if (x>y) x=y;} template
IL T MAX(T x,T y){ return x>y?x:y;} template
IL T MIN(T x,T y){ return x
=0) cout<<"black"<

 

 

 

2.操作分块

分块这个东西有的时候的确简单巧妙。。

但一般我也不会去想分块。。

这个是看了别人题解的。。

我们以每$\sqrt{n}$个元素分一组

对块内的操作,我们等待$\sqrt{n}$都做完了再把这$\sqrt{n}$个操作加入树中

对于当前的询问,我们只需要树内的$\sqrt{n}$个节点的信息就可以了

我们可以建立虚树维护

本来打算学树上分块的。。。但发现这东西并没有啥用

会线段树合并/dsu on tree/树上莫队 应该不会也没啥关系

像这种利用虚树的题目还是比较多的

转载于:https://www.cnblogs.com/yinwuxiao/p/10124276.html

你可能感兴趣的文章
专题-HTTP
查看>>
洛谷 P3366 【模板】最小生成树
查看>>
VUEX报 “was assigned to but it has no setter”
查看>>
ios 不支持-,-时间。
查看>>
AntDesign vue学习笔记(二)axios使用
查看>>
关于Altera LVDS 经验分享
查看>>
英语学习
查看>>
log4net的使用
查看>>
2016 pku campus J/OpenJ_POJ - C16J (思维)
查看>>
数据库知识点滴积累
查看>>
从客户端中检测到有潜在危险的 Request.Form 值 方法
查看>>
NodeJS与Javascript时代
查看>>
简单的SqlHelper
查看>>
python 异步线程简单实现
查看>>
寻找“水王”
查看>>
CSS3笔记
查看>>
Java Applet 素数小程序
查看>>
设计模式-行为型模式,状态模式(14)
查看>>
基本形态学滤波
查看>>
郭德纲家书
查看>>