BZOJ2631——tree
1、题目大意:bzoj1798的lct版本
2、分析:这个把线段树改成splay就好
#include <stack>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
using namespace std;
#define LL long long
namespace LinkCutTree{
struct Node{
Node *ch[2], *fa;
LL sum, num;
LL size;
bool rev;
LL mul, plu;
inline int which();
inline void reverse(){
if(this) rev ^= 1;
}
inline void pd();
inline void maintain(){
sum = (num + ch[0] -> sum + ch[1] -> sum) % 51061;
size = (1 + ch[0] -> size + ch[1] -> size) % 51061;
}
Node();
} *null = new Node, tree[100010], *pos[100010];
Node::Node(){
num = sum = 1;
rev = false;
ch[0] = ch[1] = fa = null;
mul = 1;
plu = 0;
size = 1;
}
inline void Node::pd(){
if(rev){
swap(ch[0], ch[1]);
ch[0] -> reverse();
ch[1] -> reverse();
rev = false;
}
if(ch[0] != null){
ch[0] -> mul *= mul;
ch[0] -> plu *= mul;
ch[0] -> plu += plu;
ch[0] -> num *= mul;
ch[0] -> num += plu;
ch[0] -> sum *= mul;
ch[0] -> sum += plu * ch[0] -> size;
ch[0] -> mul %= 51061;
ch[0] -> plu %= 51061;
ch[0] -> num %= 51061;
ch[0] -> sum %= 51061;
}
if(ch[1] != null){
ch[1] -> mul *= mul;
ch[1] -> plu *= mul;
ch[1] -> plu += plu;
ch[1] -> num *= mul;
ch[1] -> num += plu;
ch[1] -> sum *= mul;
ch[1] -> sum += plu * ch[1] -> size;
ch[1] -> mul %= 51061;
ch[1] -> plu %= 51061;
ch[1] -> num %= 51061;
ch[1] -> sum %= 51061;
}
mul = 1;
plu = 0;
}
inline int Node::which(){
if(fa == null || (this != fa -> ch[0] && this != fa -> ch[1])) return -1;
return this == fa -> ch[1];
}
inline void rotate(Node *o){
Node *p = o -> fa;
int l = o -> which(), r = l ^ 1;
o -> fa = p -> fa;
if(p -> which() != -1) p -> fa -> ch[p -> which()] = o;
p -> ch[l] = o -> ch[r];
if(o -> ch[r]) o -> ch[r] -> fa = p;
o -> ch[r] = p; p -> fa = o;
o -> ch[r] -> maintain();
o -> maintain();
}
inline void splay(Node *o){
static stack<Node*> st;
if(!o) return;
Node *p = o;
while(1){
st.push(p);
if(p -> which() == -1) break;
p = p -> fa;
}
while(!st.empty()){
st.top() -> pd(); st.pop();
}
while(o -> which() != -1){
p = o -> fa;
if(p -> which() != -1){
if(p -> which() ^ o -> which()) rotate(o);
else rotate(p);
}
rotate(o);
}
}
inline void Access(Node *o){
Node *y = null;
while(o != null){
splay(o);
o -> ch[1] = y;
o -> maintain();
y = o; o = o -> fa;
}
}
inline void MovetoRoot(Node *o){
Access(o);
splay(o);
o -> reverse();
}
inline Node* FindRoot(Node *o){
Access(o);
splay(o);
while(o -> ch[0] != null) o = o -> ch[0];
return o;
}
inline void Link(Node *x, Node *y){
MovetoRoot(x);
x -> fa = y;
}
inline void Cut(Node *x, Node *y){
MovetoRoot(x);
Access(y);
splay(y);
y -> ch[0] = x -> fa = null;
y -> maintain();
}
}
int main(){
using namespace LinkCutTree;
null -> mul = 1;
null -> size = 0;
null -> plu = 0;
null -> sum = 0;
null -> num = 0;
null -> ch[0] = null -> ch[1] = null -> fa = NULL;
int n, q;
scanf("%d%d", &n, &q);
for(int i = 1; i <= n; i ++) pos[i] = &tree[i];
for(int i = 1; i < n; i ++){
int u, v;
scanf("%d%d", &u, &v);
Link(pos[u], pos[v]);
}
char op[5];
int x1, y1, x2, y2, c;
while(q --){
scanf("%s", op);
if(op[0] == '+'){
scanf("%d%d%d", &x1, &y1, &c);
MovetoRoot(pos[x1]);
Access(pos[y1]);
splay(pos[y1]);
pos[y1] -> num += c;
pos[y1] -> num %= 51061;
pos[y1] -> sum += pos[y1] -> size * c;
pos[y1] -> sum %= 51061;
pos[y1] -> plu += c;
pos[y1] -> plu %= 51061;
}
else if(op[0] == '-'){
scanf("%d%d%d%d", &x1, &y1, &x2, &y2);
Cut(pos[x1], pos[y1]);
Link(pos[x2], pos[y2]);
}
else if(op[0] == '*'){
scanf("%d%d%d", &x1, &y1, &c);
MovetoRoot(pos[x1]);
Access(pos[y1]);
splay(pos[y1]);
pos[y1] -> num *= c;
pos[y1] -> num %= 51061;
pos[y1] -> sum *= c;
pos[y1] -> sum %= 51061;
pos[y1] -> mul *= c;
pos[y1] -> mul %= 51061;
pos[y1] -> plu *= c;
pos[y1] -> plu %= 51061;
}
else{
scanf("%d%d", &x1, &y1);
MovetoRoot(pos[x1]);
Access(pos[y1]);
splay(pos[y1]);
pos[y1] -> sum %= 51061;
printf("%lld\n", pos[y1] -> sum);
}
}
return 0;
}
BZOJ2631——tree的更多相关文章
- bzoj2631: tree
#include <iostream> #include <cstdio> #include <cstring> #include <cmath> #i ...
- [BZOJ2631]tree 动态树lct
2631: tree Time Limit: 30 Sec Memory Limit: 128 MBSubmit: 5171 Solved: 1754[Submit][Status][Discus ...
- [Link-Cut-Tree][BZOJ2631]Tree
题面 Description: 一棵\(n\)个点的树,每个点的初始权值为\(1\).对于这棵树有\(q\)个操作,每个操作为以下四种操作之一: + u v c:将\(u\)到\(v\)的路径上的点的 ...
- bzoj2631 tree LCT 区间修改,求和
tree Time Limit: 30 Sec Memory Limit: 128 MBSubmit: 4962 Solved: 1697[Submit][Status][Discuss] Des ...
- bzoj2631: tree lct
要打mul和add的lct 50000+的mod用unsigned int好了TAT (坑爹没打pc('\n');(静态)调了好久,样例竟然只输出一个,orz,也不提示PE T_T) #include ...
- BZOJ2631 tree(伍一鸣) LCT 秘制标记
这个题一看就是裸地LCT嘛,但是我wa了好几遍,这秘制标记...... 注意事项:I.*对+有贡献 II.先下传*再下传+(因为我们已经维护了+,不能再让*对+产生贡献)III.维护+用到size # ...
- [bzoj2631]tree——lct
Brief Description 一棵n个点的树,每个点的初始权值为1.对于这棵树有q个操作,每个操作为以下四种操作之一: u v c:将u到v的路径上的点的权值都加上自然数c: u1 v1 u2 ...
- BZOJ2631 tree 【LCT】
题目 一棵n个点的树,每个点的初始权值为1.对于这棵树有q个操作,每个操作为以下四种操作之一: + u v c:将u到v的路径上的点的权值都加上自然数c: - u1 v1 u2 v2:将树中原有的边( ...
- BZOJ2631: tree(LCT)
Description 一棵n个点的树,每个点的初始权值为1.对于这棵树有q个操作,每个操作为以下四种操作之一: + u v c:将u到v的路径上的点的权值都加上自然数c: - u1 v1 u2 v2 ...
随机推荐
- CSS3-实现单选框radio的小动画
在微信上看到一个教程文,觉得制作的小动画还是很有意思的,自己也试验了一下.一开始动画怎么都不执行(我用的HB),因为内置浏览器对css3的不兼容.加上各种浏览器前缀后就好了.但是旋转那个效果,在HB里 ...
- JAVA jdbc获取数据库连接
JDBC获取数据库连接的帮助类 import java.io.InputStream; import java.sql.Connection; import java.sql.DriverManage ...
- 如何排查APP服务端和客户端是否支持ATS
服务端排查 取得客户端直接连接的服务端域名及端口,例如mob.com.cn,端口443,即HTTPS默认端口.针对公网可访问的生产环境地址,建议使用的在线监测工具.https://wosign.ssl ...
- You Can Do Research Too
You Can Do Research Too I was recently discussing gatekeeping and the process of getting started in ...
- PHP代码质量优化
最近总结了一些平常写PHP代码时的一些优化分享给大家. 1.尽量使用绝对路径 相对路径中会检查很多路径,这时我们可以使用绝对路径,但绝对路径不利于后期维护,所以define定义的时候使用__FILE_ ...
- nginx和fpm的进程数配置和502,504错误
502 和 php-fpm.conf 1.php-cgi进程数不够用.php执行时间长,导致没有空闲进程处理新请求. 2.php-cgi进程死掉.php-fpm超时时间短,当前进程执行超时关闭连接. ...
- 正则表达式分组()、不捕获(?:)和断言(?<=)详解
分组 分组在正则中用()表示,根据小菜理解,分组的作用有两个: 1.将某些规律看成是一组,然后进行组级别的重复,可以得到意想不到的效果. 2.分组之后,可以通过后向引用简化表达式(\1 或者$1). ...
- Could not load file or assembly Microsoft.Web.Infrastructure
Error info:Could not load file or assembly 'Microsoft.Web.Infrastructure, Version=1.0.0.0, Culture=n ...
- NopCommerce源码分析ContainerBuilder builder.Update(container)
/// <summary> /// Register dependencies /// </summary> /// <param name="config&q ...
- 免费SSL证书Let’s Encrypt
由于我们公司测试环境使用的这个.自己没有亲手搭建使用,但是知道有这个东西.以后使用的话自己直接搞起. 连接文档:http://www.5icool.org/a/201512/a15271.html ...