博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数据结构杂题集
阅读量:6503 次
发布时间:2019-06-24

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

Codechef SD ER

• 给出一棵树,维护点集 ?(加点删点)

• 如果 ? 的大小是偶数,输出:如果将 ? 中的点两两连上边权为树

上距离的边,那么 ? 里的最小权完美匹配是多少
• ?, ? ≤ 10^6

考虑边的贡献

交叉一定不优,所以

一条边有贡献当且仅当两侧各有奇数个点

也就是子树里有奇数个点

点删除增加的时候就是对到根的链上边权值变成0或者变回自己

LCT维护,维护存在边、不存在边权值和,打“取反”标记即可。

 

经典问题

• 给出一张无向图

• 每次删掉一个点,求图中边双连通的点对个数
• ?, ? ≤ 10^6

时光倒流。删点变成加点

再把加点改成加边

如果只询问连通性的话,并查集就可以做

边双联通和一般连通性的共同性质是:有传递性(x=y,y=z,则x=z)

一个并查集维护连通性,两棵树连通的时候,启发式合并,把相连的点作为小树的根,再连上去

另一个并查集进行路径压缩,维护边双。连接树上两个点,把两个点到LCA路径上的点合并起来,并查集路径压缩一下加速。

至于连接两棵树,第二个并查集怎么办:暴力重新把相关的边连接一下,所以启发式合并的条件是:非树边+树边的总和小

找LCA暴力倍增就是log^2了

可以LCT强行维护。先access(a),再access(b) 这个时候第一个连接的点就是LCA

 

 

ICPC HK 2018 

• 刚开始你有 ? 个序列,刚开始序列都是长度为 1 的

• 每次支持拼接两个序列,问每个序列的每个子区间的最小值的和
• ? ≤ 10^6

笛卡尔树,

每个点的贡献就是左右儿子sz乘积

拼接?笛卡尔树合并

定义关键点:一个树最左边和最右边两个链

关键点只有初始的O(n)个

合并x,y时候,对于x的右链和y的左链,从最底下开始往上找到第一个能放的位置,这一段长度设为len

之后这段关键点会被覆盖住,不再存在。

然后y的这个点左儿子和x的这个点的右儿子进行类似fhq的合并,也就是一般的暴力合并

由于路径上的点就是两个段的关键点

关键点然后就消失了。

走的长度就是关键点减少的个数

所以均摊O(n)

从最底下开始找,可以用链表然后链表合并。单纯记录每个点最右边的点也可以

sz什么的pushup就找到了。

(pushup这个不太好找到,最开始一段链很难搞。可以用LCT同时和笛卡尔树合并做,用于打上标记)

挺trick的

 

转载于:https://www.cnblogs.com/Miracevin/p/10373026.html

你可能感兴趣的文章
mysql8.0 mysqld: File './binlog.index' not found
查看>>
C语言扩展Python(二)
查看>>
window.addEventListener介绍说明
查看>>
js获取节点
查看>>
jq复习心得
查看>>
去掉EM标签斜体样式
查看>>
触摸事件&手势识别
查看>>
NoSQL数据库笔谈(转)
查看>>
gem sources
查看>>
推荐大家一个比较好的弹出层效果
查看>>
Spark Python 快速体验
查看>>
让 SpringMVC 接收多个对象的4种方法
查看>>
HttpClient发送post请求,中文编码问题
查看>>
Asterisk 1.8 sip 协议栈分析
查看>>
React Native编译错误:ReactAndroid:buildReactNdkLib FAILED
查看>>
php+jquery实现转盘抽奖 概率可任意调
查看>>
如何让CI框架支持service层
查看>>
VIM心得(学习VIM语法:动词、名词和修饰词)
查看>>
Nginx+Tomcat负载均衡配置
查看>>
ImageSpan 图文混排异步下载 demo.
查看>>