题解:

题解居然是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的更多相关文章

  1. (2016北京集训十四)【xsy1557】task

    题解: 限制可以看成图状结构,每个任务的对物品数量的影响可以看成权值,只不过这个权值用一个五元组来表示. 那么题意要求的就是最大权闭合子图,网络流经典应用. 代码: #include<algor ...

  2. (2016北京集训十)【xsy1530】小Q与内存

    一道很有意思的神题~ 暴力平衡树的复杂度很对(并不),但是$2^{30}$的空间一脸屎 这题的正解是一个类似线段树的数据结构,我觉得很有创新性Orz 首先可以想到一种暴力就是用一个点代表一个区间,然后 ...

  3. (2016北京集训十)【xsy1529】小Q与进位制 - 分治FFT

    题意很简单,就是求这个数... 其实场上我想出了分治fft的正解...然而不会打...然后打了个暴力fft挂了... 没啥好讲的,这题很恶心,卡常卡精度还爆int,要各种优化,有些dalao写的很复杂 ...

  4. (2016北京集训十)【xsy1528】azelso - 概率期望dp

    北京集训的题都是好题啊~~(于是我爆0了) 注意到一个重要的性质就是期望是线性的,也就是说每一段的期望步数可以直接加起来,那么dp求出每一段的期望就行了... 设$f_i$表示从$i$出发不回到$i$ ...

  5. (2016北京集训十二)【xsy1542】疯狂求导

    题解: 这题看起来很难...但是实际上并没有想象中的那么难 第一眼看上去不会求导公式怎么办?不要紧,题目背景非常良心的给出了题目中的导数计算公式 求完导合并同类项很恶心怎么办?不要紧,样例解释说明了不 ...

  6. 股神小L 2016Vijos省选集训 day1

    股神小L (stock.c/pas/cpp)============================ 小L厌倦了算法竞赛,希望到股市里一展身手.他凭借自己还行的计算机功底和可以的智商,成功建立一个模型 ...

  7. 2016北京集训测试赛(十四)Problem B: 股神小D

    Solution 正解是一个\(\log\)的link-cut tree. 将一条边拆成两个事件, 按照事件排序, link-cut tree维护联通块大小即可. link-cut tree维护子树大 ...

  8. 2016北京集训测试赛(十四)Problem A: 股神小L

    Solution 考虑怎么卖最赚钱: 肯定是只卖不买啊(笑) 虽然说上面的想法很扯淡, 但它确实能给我们提供一种思路, 我们能不买就不买; 要买的时候就买最便宜的. 我们用一个优先队列来维护股票的价格 ...

  9. [2016北京集训试题14]股神小D-[LCT]

    Description Solution 将(u,v,l,r)换为(1,u,v,l)和(2,u,v,r).进行排序(第4个数为第一关键字,第1个数为第二关键字).用LCT维护联通块的合并和断开.(维护 ...

随机推荐

  1. LeetCode Golang 7. 整数反转

    7. 整数反转 给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转. Tips : Math包给出的类型大小的边界: // Integer limit values. const ...

  2. 安装Oracle 12c及解决遇到的问题

    一.[INS-30131]执行安装程序验证所需的初始设置失败(原因:无法访问临时位置) 原文链接:https://blog.csdn.net/u013388049/article/details/85 ...

  3. BZOJ 4229: 选择 LCT_独创方法_边双

    考虑如果两点在一个环中,那么这两点一定可以构出双联通分量. 考虑环和环镶嵌,那么两个环中的点一定都互为双联通分量. 由此,我们想到一个算法: 将删边转为反向加边,用LCT维护图. 当我们连接两个点时, ...

  4. 7、A Design of Group Recommendation Mechanism Considering Opportunity Cost and Personal Activity Using Spark Framework---使用Spark框架的基于机会成本以及个人活动群组推荐机制

    来源EDB2018---EDB 一.摘要: 组推荐是将一种项目(例如产品.服务)推荐给由多个成员组成的组的方法. 最小痛苦法(least Misery)是一种具有代表性的群体推荐方法,其能够推荐考虑群 ...

  5. 基于Quick_Thought Vectors的Sentence2Vec神经网络实现

    一.前言 1.Skip-Thought-Vector论文 https://github.com/ryankiros/skip-thoughts 2.本文假设读者已了解Skip-Gram-Vector和 ...

  6. hive的mysql作元数据的hive-site.xml配置

    <property> <name>javax.jdo.option.ConnectionURL</name> <value>jdbc:mysql://s ...

  7. 题解 CF821D 【Okabe and City】

    其实,这道题不用long long也能AC. 题意是给你一个矩阵,有一些格子被点亮有一些没有,每一次只能在被点亮的格子上面走. 然后你每一次都可以选择点亮一行或一排(非永久),现在问你最少点多少次可以 ...

  8. Run Nutch In Eclipse on Linux and Windows nutch version 0.9

    Running Nutch in Eclipse Here are instructions for setting up a development environment for Nutch un ...

  9. spring boot pom

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...

  10. LintCode-交叉字符串

    给出三个字符串:s1.s2.s3,推断s3是否由s1和s2交叉构成. 您在真实的面试中是否遇到过这个题? Yes 例子 比方 s1 = "aabcc" s2 = "dbb ...