这个题一看就是裸地LCT嘛,但是我wa了好几遍,这秘制标记......

注意事项:I.*对+有贡献 II.先下传*再下传+(因为我们已经维护了+,不能再让*对+产生贡献)III.维护+用到size

#include<cstdio>
#include<cstring>
#include<iostream>
#define MAXN 100005
#define P 51061
using namespace std;
inline unsigned int read()
{
unsigned int sum=;
char ch=getchar();
while(ch<''||ch>'')ch=getchar();
while(ch>=''&&ch<='')
{
sum=(sum<<)+(sum<<)+ch-'';
ch=getchar();
}
return sum;
}
struct LCT
{
struct Node
{
Node *ch[],*f;
unsigned int key,multi,pluss,sum,size;
bool rev;
void pushup()
{
sum=(key+ch[]->sum+ch[]->sum)%P;
size=ch[]->size++ch[]->size;
}
}null[MAXN];
void swap(Node *&x,Node *&y)
{
Node *temp=x;
x=y;
y=temp;
}
void pushdown(Node *p)
{
if(p->rev)
{
p->ch[]->rev^=;
p->ch[]->rev^=;
swap(p->ch[],p->ch[]);
p->rev=;
}
if(p->multi!=)
{
p->ch[]->sum=(p->ch[]->sum*p->multi)%P;
p->ch[]->key=(p->ch[]->key*p->multi)%P;
p->ch[]->pluss=(p->ch[]->pluss*p->multi)%P;
p->ch[]->multi=(p->ch[]->multi*p->multi)%P;
p->ch[]->sum=(p->ch[]->sum*p->multi)%P;
p->ch[]->key=(p->ch[]->key*p->multi)%P;
p->ch[]->pluss=(p->ch[]->pluss*p->multi)%P;
p->ch[]->multi=(p->ch[]->multi*p->multi)%P;
p->multi=;
}
if(p->pluss)
{
if(p->ch[]!=null)
{
p->ch[]->sum=(p->ch[]->sum+p->pluss*p->ch[]->size)%P;
p->ch[]->key=(p->ch[]->key+p->pluss)%P;
p->ch[]->pluss=(p->ch[]->pluss+p->pluss)%P;
}
if(p->ch[]!=null)
{
p->ch[]->sum=(p->ch[]->sum+p->pluss*p->ch[]->size)%P;
p->ch[]->key=(p->ch[]->key+p->pluss)%P;
p->ch[]->pluss=(p->ch[]->pluss+p->pluss)%P;
}
p->pluss=;
}
}
void Init()
{
null->ch[]=null->ch[]=null->f=null;
for(unsigned int i=;i<MAXN;i++)
null[i].ch[]=null[i].ch[]=null[i].f=null,null[i].sum=null[i].key=null[i].multi=,null[i].pluss=;
}
bool isroot(Node *p)
{
return p->f->ch[]!=p&&p->f->ch[]!=p;
}
unsigned int get(Node *p)
{
return p->f->ch[]==p;
}
void rotate(Node *p)
{
Node *fa=p->f,*pa=fa->f;
unsigned int j=get(p);
if(!isroot(fa))pa->ch[get(fa)]=p;
if((fa->ch[j]=p->ch[j^])!=null)fa->ch[j]->f=fa;
fa->f=p;
p->f=pa;
p->ch[j^]=fa;
fa->pushup();
p->pushup();
}
void spaly(Node *p)
{
pushdown(p);
for(Node *fa=p->f;!isroot(p);rotate(p),fa=p->f)
if(!isroot(fa))
{
pushdown(fa->f),pushdown(fa),pushdown(p);
rotate(get(fa)==get(p)?fa:p);
}
else
pushdown(fa),pushdown(p);
}
void expose(Node *x)
{
Node *y=null;
while(x!=null)
{
spaly(x);
x->ch[]=y;
x->pushup();
y=x;
x=x->f;
}
}
void make_root(Node *p)
{
expose(p);
spaly(p);
p->rev^=;
}
void cut(unsigned int a,unsigned int b)
{
Node *x=null+a,*y=null+b;
make_root(x);
expose(y);
spaly(y);
y->ch[]->f=null;
y->ch[]=null;
y->pushup();
}
void link(unsigned int a,unsigned int b)
{
Node *x=null+a,*y=null+b;
make_root(x);
x->f=y;
}
void up(unsigned int a,unsigned int b,unsigned int c)
{
Node *x=null+a,*y=null+b;
make_root(x);
expose(y);
spaly(y);
y->pluss=(y->pluss+c)%P;
y->key=(y->key+c)%P;
y->sum=(y->sum+y->size*c)%P;
}
void UUP(unsigned int a,unsigned int b,unsigned int c)
{
Node *x=null+a,*y=null+b;
make_root(x);
expose(y);
spaly(y);
y->multi=(y->multi*c)%P;
y->key=(y->key*c)%P;
y->sum=(y->sum*c)%P;
y->pluss=(y->pluss*c)%P;
}
unsigned int query(unsigned int a,unsigned int b)
{
Node *x=null+a,*y=null+b;
make_root(x);
expose(y);
spaly(y);
return y->sum;
}
}YY;
int main()
{
YY.Init();
unsigned int n=read(),m=read();
for(unsigned int i=;i<n;i++)
{
unsigned int x=read(),y=read();
YY.link(x,y);
}
for(unsigned int i=,x,y,z,a,b;i<=m;i++)
{
char ch;
cin>>ch;
x=read(),y=read();
switch(ch)
{
case '*':z=read();
YY.UUP(x,y,z);
break;
case '+':z=read();
YY.up(x,y,z);
break;
case '-':a=read(),b=read();
YY.cut(x,y);
YY.link(a,b);
break;
case '/':printf("%d\n",YY.query(x,y));
break;
}
}
return ;
}

BZOJ2631 tree(伍一鸣) LCT 秘制标记的更多相关文章

  1. Tsinsen A1303. tree(伍一鸣) LCT

    LCT的各种操作... . cut link add mul size rev query 写的效率不够高... BZOJ上似乎TLE. ... A1303. tree(伍一鸣) 时间限制:2.5s  ...

  2. Tsinsen A1303. tree(伍一鸣) (LCT+处理标记)

    [题目链接] http://www.tsinsen.com/A1303 [题意] 给定一棵树,提供树上路径乘/加一个数,加边断边,查询路径和的操作. [思路] LCT+传标 一次dfs构造LCT. L ...

  3. 【国家集训队2012】tree(伍一鸣)

    Description 一棵n个点的树,每个点的初始权值为1.对于这棵树有q个操作,每个操作为以下四种操作之一:  + u v c:将u到v的路径上的点的权值都加上自然数c:  - u1 v1 u2 ...

  4. [COGS 1799][国家集训队2012]tree(伍一鸣)

    Description 一棵n个点的树,每个点的初始权值为1.对于这棵树有q个操作,每个操作为以下四种操作之一: + u v c:将u到v的路径上的点的权值都加上自然数c: - u1 v1 u2 v2 ...

  5. cogs1799 [国家集训队2012]tree(伍一鸣)

    LCT裸题 注意打标记之间的影响就是了 这个膜数不会爆unsigned int #include<cstdio> #include<cstdlib> #include<a ...

  6. 数据结构(动态树):[国家集训队2012]tree(伍一鸣)

    [问题描述] 一棵n个点的树,每个点的初始权值为1.对于这棵树有q个操作,每个操作为以下四种操作之一: + u v c:将u到v的路径上的点的权值都加上自然数c: - u1 v1 u2 v2:将树中原 ...

  7. 秘制牛肉Alpha阶段项目展示

    秘制牛肉Alpha阶段项目展示 1.团队成员和个人博客 · 左顺:"我是左顺,秘制牛肉队开发人员". · 王尖兵:"C,java,html5都会一点的菜鸡,没做过团队项目 ...

  8. 【洛谷1501】[国家集训队] Tree II(LCT维护懒惰标记)

    点此看题面 大致题意: 有一棵初始边权全为\(1\)的树,四种操作:将两点间路径边权都加上一个数,删一条边.加一条新边,将两点间路径边权都加上一个数,询问两点间路径权值和. 序列版 这道题有一个序列版 ...

  9. 秘制牛肉Gamma阶段项目展示

    秘制牛肉Gamma阶段项目展示 1.团队成员和个人博客 · 左顺:在项目中主要负责后端开发.个人博客 · 袁勤:精通网页项目开发,前端后端都很强,在完成自己后端任务后也会积极帮助其他人的任务.个人博客 ...

随机推荐

  1. JDK8新垃圾回收机制--G1垃圾回收机制

    G1全称是Garbage First Garbage Collector,使用G1的目的是简化性能优化的复杂性.例如,G1的主要输入参数是初始化和最大Java堆大小.最大GC中断时间. G1 GC由Y ...

  2. web学习第二天

    今天是学习web的第二天,早上用css3做了个会动的小熊,border-radius为圆的半径, .smallxiong {    width: 400px;    height: 400px;    ...

  3. ruby编码说明

    程序编码一般分几种情况: 1.源码文件编码 2.接收外部内容的编码 3.运行环境编码 4.操作系统编码 首先源码文件的编码,可以通过在ruby文件的头部添加一行申明即可,这样所有在源码里面出现的字符都 ...

  4. 【JDBC】一、JDBC连接数据库

    package com.jdbc; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLExce ...

  5. Kubernetes-GC

    Kubernetes集群中垃圾回收(Garbage Collection)机制由kubelet完成.kubelet定期清理不再使用的容器和镜像,每分钟进行一次容器的GC操作,每五分钟进行一次镜像的GC ...

  6. (数据科学学习手札29)KNN分类的原理详解&Python与R实现

    一.简介 KNN(k-nearst neighbors,KNN)作为机器学习算法中的一种非常基本的算法,也正是因为其原理简单,被广泛应用于电影/音乐推荐等方面,即有些时候我们很难去建立确切的模型来描述 ...

  7. (数据科学学习手札24)逻辑回归分类器原理详解&Python与R实现

    一.简介 逻辑回归(Logistic Regression),与它的名字恰恰相反,它是一个分类器而非回归方法,在一些文献里它也被称为logit回归.最大熵分类器(MaxEnt).对数线性分类器等:我们 ...

  8. cf987f AND Graph

    #include <iostream> #include <cstdio> using namespace std; int n, uu, m; bool a[4500005] ...

  9. ubuntu 关闭触控板

    第一种: 1 sudo rmmod psmouse    这个是禁用的 2 sudo modprobe psmouse 这个是启用的 这个方法很便捷,但是会将触点和触板都禁用了,一般还是希望保持触点是 ...

  10. ora-12154 TNS:"无法处理服务名"的一个解决方法

    http://www.cnblogs.com/xh3/archive/2007/04/21/722217.html 很怪异的一个问题,在网络环境下配置客户端,竟然怎么也连不上主机了,看了不少帖子,大多 ...