[国家集训队] 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再也无法忍受这恼人的找袜子过程, ...
随机推荐
- 使用 wireshark 捕获 请求包
1.出错场景 今天遇到一个问题,在用户登录时,发现用户在登录的时候,一个用户登录正常,一个用户登录报错,报错的原因时400错误,分析对比发现一个用户的分配用户组多,一个分配的少,其中多的那个出错了. ...
- 开源 - Ideal库 - Excel帮助类,ExcelHelper实现(四)
书接上回,前面章节已经实现Excel帮助类的第一步TableHeper的对象集合与DataTable相互转换功能,今天实现进入其第二步的核心功能ExcelHelper实现. 01.接口设计 下面我们根 ...
- C/C++源码扫描系列- codeql 篇
首发于 https://xz.aliyun.com/t/9275 概述 codeql 是一个静态源码扫描工具,支持 c, python, java 等语言,用户可以使用 ql 语言编写自定义规则识别软 ...
- Jetpack Compose学习(15)——Pager组件的使用(对标ViewPager)
原文地址: Jetpack Compose学习(15)--Pager组件的使用(对标ViewPager)-Stars-One的杂货小窝 从名字可以看出,Pager这个就是ViewPager的替代产物 ...
- [python]邮件发送注意事项
邮件格式 关于发信,需要遵循国际发信协议要求[4],例如RFC5322协议,避免因为格式不合法,导致被收信服务器拒收. 在二零二三年以前,在开发Python的邮箱发信接口时,对邮箱格式要求不高,主要还 ...
- 还在手工写接口测试文档,已经out了
接口文档,顾名思义就是对接口说明的文档.好的接口文档包含了对接口URL,参数以及输出内容的说明,我们参照接口文档就能编写出一个个的测试用例.而且接口文档详细的话,测试用例编写起来就会比较简单,不容易遗 ...
- Qt编写的项目作品20-百度地图综合应用(在线+离线+区域+下载)
一.功能特点 (一).省市区域地图封装类功能特点 同时支持闪烁点图.迁徙图.区域地图.世界地图.仪表盘等. 可以设置标题.提示信息.背景颜色.文字颜色.线条颜色.区域颜色等各种颜色. 可设置城市的名称 ...
- Qt通用方法及类库8
函数名 //异或加密算法 static QString getXorEncryptDecrypt(const QString &str, char key); //异或校验 static uc ...
- FFmpeg中的色彩空间与像素格式3-像素格式
FFmpeg 中的色彩与像素系列文章如下: [1]. FFmpeg中的色彩空间与像素格式1-色彩空间基础 [2]. FFmpeg中的色彩空间与像素格式2-RGB/YUV色彩空间 [3]. FFmpeg ...
- 阿里IM技术分享(七):闲鱼IM的在线、离线聊天数据同步机制优化实践
本文由阿里闲鱼技术团队书闲分享,原题"如何有效缩短闲鱼消息处理时长",有修订和改动,感谢作者的分享. 1.引言 闲鱼技术团队围绕IM这个技术范畴,已经分享了好几篇实践性总结文章,本 ...