[国家集训队] Tree2 题解
加边删边 \(LCT\),标记下放同 \(luogu\) 线段树 \(2\) 一题。
时间复杂度 \(O(n\log n)\),第一次交的时候我维护 \(sum\) 不维护 \(sz\ WA\) 完了。
#include<bits/stdc++.h>
#define int long long
#define fa(x) lct[x].fa
#define fl(x) lct[x].fl
#define ad(x) lct[x].ad
#define tm(x) lct[x].tm
#define id(x) lct[x].id
#define sz(x) lct[x].sz
#define val(x) lct[x].val
#define sum(x) lct[x].sum
#define sn(x,i) lct[x].sn[i]
#define inf 1000000000
using namespace std;
const int N=100005,p=51061;
struct node{
int sn[2],fa,fl,ad,tm,val,sum,id,sz;
}lct[N];int n,m,tp,st[N];
int check(int x){
return sn(fa(x),0)!=x&&sn(fa(x),1)!=x;
}int chksn(int x){
return sn(fa(x),1)==x;
}void push_up(int x){
sum(x)=(sum(sn(x,0))+sum(sn(x,1))+val(x))%p;
sz(x)=(sz(sn(x,0))+sz(sn(x,1))+1)%p;
}void down(int x,int a,int t){
if(!x) return;
val(x)=(val(x)*t+a)%p;
sum(x)=(sum(x)*t+a*sz(x))%p;
ad(x)=(ad(x)*t+a)%p;
tm(x)=tm(x)*t%p;
}void push_down(int x){
if(!x) return;
if(fl(x)){
fl(sn(x,0))^=1,fl(sn(x,1))^=1;
swap(sn(x,0),sn(x,1)),fl(x)=0;
}down(sn(x,0),ad(x),tm(x));
down(sn(x,1),ad(x),tm(x));
ad(x)=0,tm(x)=1;
}void rotate(int x){
int y=fa(x),z=fa(y),k=chksn(x);
if(!check(y))
sn(z,chksn(y))=x;
fa(x)=z,fa(y)=x,fa(sn(x,1-k))=y;
sn(y,k)=sn(x,1-k),sn(x,1-k)=y;
push_up(y);
}void splay(int x){
st[tp=1]=x;
for(int i=x;!check(i);i=fa(i)) st[++tp]=fa(i);
while(tp) push_down(st[tp--]);
while(!check(x)){
int y=fa(x),z=fa(y);
if(!check(y))
rotate(chksn(x)!=chksn(y)?x:y);
rotate(x);
}push_up(x);
}void access(int x){
for(int i=0;x;i=x,x=fa(x))
splay(x),sn(x,1)=i,push_up(x);
}void mk(int x){
access(x),splay(x),fl(x)^=1;
}void split(int x,int y){
mk(x),access(y),splay(y);
}void cut(int x,int y){
split(x,y),sn(y,0)=fa(x)=0;
}void link(int x,int y){
mk(x),access(y),fa(x)=y;
}signed main(){
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
cin>>n>>m;
for(int i=1;i<=n;i++) sum(i)=val(i)=sz(i)=tm(i)=1;
for(int i=1,x,y;i<n;i++) cin>>x>>y,link(x,y);
while(m--){
char opt;int x,y,z,w;cin>>opt>>x>>y;
if(opt=='+')
cin>>z,split(x,y),down(y,z,1);
if(opt=='-')
cin>>z>>w,cut(x,y),link(z,w);
if(opt=='*')
cin>>z,split(x,y),down(y,0,z);
if(opt=='/')
split(x,y),cout<<sum(y)<<"\n";
}return 0;
}
[国家集训队] Tree2 题解的更多相关文章
- Luogu2839 [国家集训队]middle 题解
题目很好,考察对主席树的深入理解与灵活运用. 首先看看一般解决中位数的思路,我们二分一个 \(mid\),将区间中 \(\ge mid\) 的数置为 \(1\),小于的置为 \(-1\),然后求区间和 ...
- 【题解】P1407国家集训队稳定婚姻
[题解][P1407 国家集训队]稳定婚姻 很好的一道建模+图论题. 婚姻关系?很像二分图匹配呀,不过不管怎么办先建模再说.婚姻关系显然用图方面的知识解决.建图! 它给定的是字符串,所以我们使用\(a ...
- P2634 [国家集训队]聪聪可可(题解)(点分治)
P2634 [国家集训队]聪聪可可(题解)(点分治) 洛谷题目 #include<iostream> #include<cstdlib> #include<cstdio& ...
- 题解-[国家集训队]Crash的数字表格 / JZPTAB
题解-[国家集训队]Crash的数字表格 / JZPTAB 前置知识: 莫比乌斯反演 </> [国家集训队]Crash的数字表格 / JZPTAB 单组测试数据,给定 \(n,m\) ,求 ...
- 【题解】国家集训队礼物(Lucas定理)
[国家集训队]礼物(扩展Lucas定理) 传送门可以直接戳标题 172.40.23.20 24 .1 答案就是一个式子: \[ {n\choose \Sigma_{i=1}^m w}\times\pr ...
- 洛谷P2172 [国家集训队]部落战争 题解
题目链接:https://www.luogu.org/problemnew/show/P2172 分析: 不要被[国家集训队]的标签吓到,其实这题不是很难. 本题可以对比P4304 [TJOI2013 ...
- BZOJ 2038 [2009国家集训队]小Z的袜子 莫队
2038: [2009国家集训队]小Z的袜子(hose) 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=2038 Descriptionw ...
- Bzoj 2038: [2009国家集训队]小Z的袜子(hose) 莫队,分块,暴力
2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 Sec Memory Limit: 259 MBSubmit: 5763 Solved: 2660[Subm ...
- happiness[国家集训队2011(吴确)]
[试题来源] 2011中国国家集训队命题答辩 [问题描述] 高一一班的座位表是个n*m的矩阵,经过一个学期的相处,每个同学和前后左右相邻的同学互相成为了好朋友.这学期要分文理科了,每个同学对于选择文科 ...
- 【国家集训队2010】小Z的袜子[莫队算法]
[莫队算法][国家集训队2010]小Z的袜子 Description 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小Z再也无法忍受这恼人的找袜子过程, ...
随机推荐
- javascript 实现参数重载
1.概要 在java中,同一个函数签名,比如 getUser,我们可以根据参数的不同,调用不同功能的方法.这也就是参数重载,如何在javascript也实现参数重载呢? 2.实现方法 function ...
- 一比一还原axios源码(七)—— 取消功能
按照惯例,我们先来看下官方的例子: 你可以通过axios的CancelToken工厂函数,生成一个source,然后把这个对象作为参数传递给axios,最后,需要取消的时候调用source的cance ...
- IOS多线程之NSOperation(3)
IOS多线程之NSOperation(3) 操作优先级和服务质量 可以通过QueuePriority属性来设置operation在队列中的执行优先级 public enum QueuePriority ...
- Flutter WebView报错ERR_NAME_NOT_RESOLVED
WebView报错ERR_NAME_NOT_RESOLVED 用的webview_flutter插件,开始都用的好好的,后面突然报错ERR_NAME_NOT_RESOLVED,上网逛了一圈说如果要用h ...
- Redis应用—9.简单应用汇总
大纲 1.基于Redis实现的简单缓存机制(String数据结构) 2.实现一个最简单的分布式锁(String数据结构) 3.博客网站的文章发布与查看(String数据结构) 4.博客字数统计与文章预 ...
- 【报错解决】【Vue】与后端交互时,http与https跨域问题
问题 xhr.js:220 Mixed Content: The page at 'https://xxx' was loaded over HTTPS, but requested an insec ...
- java int转byte数组
int 转 byte[] 低字节在前(低字节序)public static byte[] toLH(int n) { byte[] b = new byte[4]; b[0] = (byte) (n ...
- Qt开发经验小技巧261-265
代码中判断当前Qt库是32位还是64位,用QSysInfo::WordSize=32/64. QTreeView控件设置左侧branch图标大小,无法通过qss设置,万能大法查看源码得知控制宽度最后取 ...
- Qt编写地图综合应用44-悬浮工具条
一.前言 百度地图内置了悬浮工具条,可以自行开启,包括离线地图也可以开启,用到了DrawingManager这个库,鼠标绘制工具条库,提供鼠标绘制点.线.面.多边形(矩形.圆)的编辑工具条的开源代码库 ...
- elementPlus 问题总结
第一次搞,遇上很多弱智问题,记录一下 安装elementPlus $ npm install element-plus --save 全局引入 import ElementPlus from 'ele ...