(2016北京集训十四)【xsy1556】股神小D - LCT

题解:
题解居然是LCT……受教了
把所有区间按照端点排序,动态维护目前有重叠的区间,用LCT维护即可。
代码:
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<queue>
using namespace std;
typedef long long ll;
struct node{
int son[],fa,sz1,sz2,rev;
}t[];
struct task{
int op,u,v,x;
task(int _op=,int _u=,int _v=,int _x=){
op=_op,u=_u,v=_v,x=_x;
}
friend bool operator <(task a,task b){
return a.x==b.x?a.op<b.op:a.x<b.x;
}
}q[];
int n,u,v,l,r,cnt=,top,s[];
ll ans;
int lr(int u){
return t[t[u].fa].son[]==u;
}
int ntrt(int u){
return t[t[u].fa].son[]==u||t[t[u].fa].son[]==u;
}
void pushup(int u){
t[u].sz1=t[t[u].son[]].sz1+t[t[u].son[]].sz1+t[u].sz2+;
}
void getrev(int u){
swap(t[u].son[],t[u].son[]);
t[u].rev^=;
}
void pd(int u){
if(t[u].rev){
if(t[u].son[])getrev(t[u].son[]);
if(t[u].son[])getrev(t[u].son[]);
t[u].rev=;
}
}
void rotate(int u){
int f=t[u].fa,ff=t[f].fa,ch=lr(u);
if(ntrt(f))t[ff].son[t[ff].son[]==f]=u;
t[f].son[ch]=t[u].son[ch^];
t[t[f].son[ch]].fa=f;
t[u].son[ch^]=f;
t[f].fa=u;
t[u].fa=ff;
pushup(f);
pushup(u);
}
void splay(int u){
int now=u;
s[top=]=now;
while(ntrt(now))s[++top]=now=t[now].fa;
while(top)pd(s[top--]);
while(ntrt(u)){
int f=t[u].fa,ff=t[f].fa;
if(ntrt(f)){
rotate(lr(u)==lr(f)?f:u);
}
rotate(u);
}
}
void access(int u){
for(int now=;u;now=u,u=t[u].fa){
splay(u);
t[u].sz2+=t[t[u].son[]].sz1-t[now].sz1;
t[u].son[]=now;
pushup(u);
}
}
void makert(int u){
access(u);
splay(u);
getrev(u);
}
void link(int x,int y){
makert(x);
makert(y);
ans+=(ll)t[x].sz1*t[y].sz1;
t[y].fa=x;
t[x].sz2+=t[y].sz1;
pushup(x);
}
void cut(int x,int y){
makert(x);
access(y);
splay(y);
t[x].fa=t[y].son[]=;
pushup(y);
}
int main(){
scanf("%d",&n);
for(int i=;i<n;i++){
scanf("%d%d%d%d",&u,&v,&l,&r);
q[++cnt]=(task){,u,v,l};
q[++cnt]=(task){,u,v,r};
}
sort(q+,q+cnt+);
for(int i=;i<=cnt;i++){
if(!q[i].op)link(q[i].u,q[i].v);
else cut(q[i].u,q[i].v);
}
printf("%lld",ans);
return ;
}
(2016北京集训十四)【xsy1556】股神小D - LCT的更多相关文章
- (2016北京集训十四)【xsy1557】task
题解: 限制可以看成图状结构,每个任务的对物品数量的影响可以看成权值,只不过这个权值用一个五元组来表示. 那么题意要求的就是最大权闭合子图,网络流经典应用. 代码: #include<algor ...
- (2016北京集训十)【xsy1530】小Q与内存
一道很有意思的神题~ 暴力平衡树的复杂度很对(并不),但是$2^{30}$的空间一脸屎 这题的正解是一个类似线段树的数据结构,我觉得很有创新性Orz 首先可以想到一种暴力就是用一个点代表一个区间,然后 ...
- (2016北京集训十)【xsy1529】小Q与进位制 - 分治FFT
题意很简单,就是求这个数... 其实场上我想出了分治fft的正解...然而不会打...然后打了个暴力fft挂了... 没啥好讲的,这题很恶心,卡常卡精度还爆int,要各种优化,有些dalao写的很复杂 ...
- (2016北京集训十)【xsy1528】azelso - 概率期望dp
北京集训的题都是好题啊~~(于是我爆0了) 注意到一个重要的性质就是期望是线性的,也就是说每一段的期望步数可以直接加起来,那么dp求出每一段的期望就行了... 设$f_i$表示从$i$出发不回到$i$ ...
- (2016北京集训十二)【xsy1542】疯狂求导
题解: 这题看起来很难...但是实际上并没有想象中的那么难 第一眼看上去不会求导公式怎么办?不要紧,题目背景非常良心的给出了题目中的导数计算公式 求完导合并同类项很恶心怎么办?不要紧,样例解释说明了不 ...
- 股神小L 2016Vijos省选集训 day1
股神小L (stock.c/pas/cpp)============================ 小L厌倦了算法竞赛,希望到股市里一展身手.他凭借自己还行的计算机功底和可以的智商,成功建立一个模型 ...
- 2016北京集训测试赛(十四)Problem B: 股神小D
Solution 正解是一个\(\log\)的link-cut tree. 将一条边拆成两个事件, 按照事件排序, link-cut tree维护联通块大小即可. link-cut tree维护子树大 ...
- 2016北京集训测试赛(十四)Problem A: 股神小L
Solution 考虑怎么卖最赚钱: 肯定是只卖不买啊(笑) 虽然说上面的想法很扯淡, 但它确实能给我们提供一种思路, 我们能不买就不买; 要买的时候就买最便宜的. 我们用一个优先队列来维护股票的价格 ...
- [2016北京集训试题14]股神小D-[LCT]
Description Solution 将(u,v,l,r)换为(1,u,v,l)和(2,u,v,r).进行排序(第4个数为第一关键字,第1个数为第二关键字).用LCT维护联通块的合并和断开.(维护 ...
随机推荐
- ZBrush中标准几何体与Polymesh
通过对ZBrush的学习,相信您已经对这款软件有了一定的了解,文本我们主要学习ZBrush®的3D物体标准几何体的特性和使用方法.在ZBrush中只有Polymesh(多边形网格)物体才能使用雕刻笔刷 ...
- 使用Eclipse将项目上传至远程GitLab
一.先将项目提交至本地仓库 1. 右击项目——Team——Share Project… 2.在弹出框中,选择Git——Next 3.在弹出框中进行如下步骤操作 4.至此,我们已经成功创建了本地GIT ...
- 路飞学城Python-Day23(practise)
本章总结 练习题 什么是C/S架构? 互联网协议是什么?分别介绍五层协议中每一层的功能? 基于tcp协议通信,为何建立链接需要三次握手,而断开链接却需要四次挥手 为何基于tcp协议的通信比基于udp协 ...
- 路飞学城Python-Day22
- 如何降低死循环的 CPU 占用
有的时候程序中需要使用死循环,比如消息监听就要用一个死循环,直到受到消息请求关闭才可能跳出循环. 一个 while(true){} 的循环中即便循环体是空的,也会占用几乎一整个 CPU 核心.为了降低 ...
- node——读取文件中的路径问题
前提 当前的js文件叫_dirnameandfilename.js和hello.txt同在G:\node练习文件夹下 还有一个_dirnameandfilename.js文件在i:/文件夹,但是i:/ ...
- Git的初始化设置
Git安装成功之后,新建一个初始化的仓库以及配置GitHub仓库 Git配置GitHub账户 安装完成之后要进行git的配置,这里配置的是GitHub账户 MisSa@DESKTOP-PIQ06QO ...
- python--(常用模块-3-正则表达式)
python--(常用模块-3-正则表达式) 正则表达式是对字符串操作的⼀种逻辑公式. 我们⼀般使⽤正则表达式对字符串进⾏匹 配和过滤. 使⽤正则的优缺点: 优点: 灵活, 功能性强, 逻辑性强. 缺 ...
- 中山纪念中学培训杂题(难的都不在这里面qwq)
来中山纪中半个月了,差不多就要结束了, 写一些之前考试能更正的题解吧,还有一些不是给人做的(比如IOI2018互测.. 备注:我不会的就没有放上来了,所有数学有关的基本上都死了. 所以这里的题目都是相 ...
- tortoiseGit怎么记住密码
tortoiseGit每次pull和push的时候都要输入git密码很是麻烦,下面是tortoiseGit记住密码的步骤 首先在你的项目界面右键 选择setting,这个步骤知识看一下你的名称和ema ...