博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BZOJ3531-[Sdoi2014]旅行(树剖+线段树动态开点)
阅读量:6307 次
发布时间:2019-06-22

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

 

完了今天才知道原来线段树的动态开点和主席树是不一样的啊

我们先考虑没有宗教信仰的限制,那么就是一个很明显的树剖+线段树,路径查询最大值以及路径和

然后有了宗教信仰的限制该怎么做呢?

先考虑暴力,对每一个信仰建一棵线段树

然而必然会MLE

于是我们只能动态开点

说一下我自己的理解吧,动态开点就是把那些建树过程中没有用的节点删去,以此来节省空间

比如当$sum[p]=0$时,直接删去点$p$

具体实现还是参考一下代码吧

1 // luogu-judger-enable-o2  2 //minamoto  3 #include
4 #define N 300005 5 using namespace std; 6 template
inline bool cmax(T&a,const T&b){
return a
sz[son[u]]) son[u]=v; 35 } 36 } 37 void dfs2(int u){ 38 if(!top[u]) top[u]=u; 39 dfn[u]=++num,rk[num]=u; 40 if(!son[u]) return; 41 top[son[u]]=top[u],dfs2(son[u]); 42 for(int i=head[u];i;i=Next[i]){ 43 int v=ver[i]; 44 if(v!=fa[u]&&v!=son[u]) dfs2(v); 45 } 46 } 47 void update(int p){ 48 mx[p]=max(mx[L[p]],mx[R[p]]); 49 sum[p]=sum[L[p]]+sum[R[p]]; 50 } 51 void modify(int &p,int l,int r,int k,int v){ 52 if(!p) p=++cnt; 53 if(l>=r){ 54 mx[p]=sum[p]=v;return; 55 } 56 int mid=(l+r)>>1; 57 if(k<=mid) modify(L[p],l,mid,k,v); 58 else modify(R[p],mid+1,r,k,v); 59 update(p); 60 if(sum[p]==0) p=0; 61 } 62 int askmax(int p,int l,int r,int ql,int qr){ 63 if(!p) return -1; 64 if(ql<=l&&qr>=r) return mx[p]; 65 int mid=(l+r)>>1,val=-1; 66 if(ql<=mid) cmax(val,askmax(L[p],l,mid,ql,qr)); 67 if(qr>mid) cmax(val,askmax(R[p],mid+1,r,ql,qr)); 68 return val; 69 } 70 int asksum(int p,int l,int r,int ql,int qr){ 71 if(!p) return 0; 72 if(ql<=l&&qr>=r) return sum[p]; 73 int mid=(l+r)>>1,val=0; 74 if(ql<=mid) val+=asksum(L[p],l,mid,ql,qr); 75 if(qr>mid) val+=asksum(R[p],mid+1,r,ql,qr); 76 return val; 77 } 78 int path_max(int u,int v){ 79 int ans=-1; 80 int xz=yc[u]; 81 while(top[u]!=top[v]){ 82 if(d[top[u]]

 

转载于:https://www.cnblogs.com/bztMinamoto/p/9398077.html

你可能感兴趣的文章
我的友情链接
查看>>
用sqlplus远程连接oracle命令
查看>>
多年一直想完善的自由行政审批流程组件【2002年PHP,2008年.NET,2010年完善数据设计、代码实现】...
查看>>
自动生成四则运算题目
查看>>
【翻译】使用新的Sencha Cmd 4命令app watch
查看>>
【前台】【单页跳转】整个项目实现单页面跳转,抛弃iframe
查看>>
因为你是前端程序员!
查看>>
数据库设计中的14个技巧
查看>>
Android学习系列(5)--App布局初探之简单模型
查看>>
git回退到某个历史版本
查看>>
ecshop
查看>>
HTML5基础(二)
查看>>
在GCE上安装Apache、tomcat等
查看>>
在Mac 系统下进行文件的显示和隐藏
查看>>
ue4(c++) 按钮中的文字居中的问题
查看>>
技能点
查看>>
读书笔记《乌合之众》
查看>>
Hadoop日记Day1---Hadoop介绍
查看>>
iOS 学习资料汇总
查看>>
centos7 yum安装jdk
查看>>