要打mul和add的lct

50000+的mod用unsigned int好了TAT

(坑爹没打pc('\n');(静态)调了好久,样例竟然只输出一个,orz,也不提示PE T_T)

 #include<iostream>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<cstdio> using namespace std; const int D=;
char in[D],out[*],*I=in,*O=out;
#define gc (*I++)
#define pc(x) ((*O++)=x)
template <typename Q>
void gt(Q&x) {
static char c,f;
for(c=gc,f=;!isdigit(c);c=gc)if(c=='-') f=;
for(x=;isdigit(c);c=gc) x=x*+c-'';
f && (x=-x);
}
template <typename Q>
void pt(Q x){
static char stk[];
static int top;
top=;
if(x==) pc('');
for(;x;x/=) stk[++top] = x%+'';
for(;top;top--) pc(stk[top]);
} typedef unsigned ll;
const int Maxn=,Mod=;
int n,m;
ll w[Maxn],tagm[Maxn],taga[Maxn],sz[Maxn];
int ch[Maxn][],p[Maxn],flip[Maxn],sum[Maxn]; void update(int x){
if(x==) return;
int&l=ch[x][],&r=ch[x][];
sum[x] = (sum[l] + sum[r] + w[x])%Mod;
sz[x] = (sz[l] + sz[r] + )%Mod;
} void add_tag(int x,ll a,ll m){
if(!x) return;
sum[x] = (sum[x]*m+a*sz[x])%Mod;
w[x] = (w[x]*m+a)%Mod;
tagm[x] = tagm[x]*m%Mod;
taga[x] = (taga[x]*m+a)%Mod;
} /*void tag_mul(int x,ll _v) {
(sum[x]*=_v)%=Mod;
(w[x]*=_v)%=Mod;
(tagm[x]*=_v)%=Mod;
(taga[x]*=_v)%=Mod;
} void tag_add(int x,ll _v) {
(sum[x]+=(sz[x]*_v)%Mod)%=Mod;
(w[x]+=_v)%=Mod;
(taga[x]+=_v)%=Mod;
}*/ bool isroot(int x) {
return ch[p[x]][]!=x && ch[p[x]][]!=x;
} void down(int x) {
int &l=ch[x][],&r=ch[x][];
if(flip[x]) {
swap(l,r);
flip[l]^=;
flip[r]^=;
flip[x]=;
}
/*if(tagm[x]!=1) {
for(int i=0;i<2;i++)if(ch[x][i])tag_mul(ch[x][i],tagm[x]);
tagm[x]=1;
}
if(taga[x]!=0) {
for(int i=0;i<2;i++)if(ch[x][i])tag_add(ch[x][i],taga[x]);
taga[x]=0;
}*/
ll&a=taga[x],&m=tagm[x];
if(a!= || m!=) {
add_tag(l,a,m);
add_tag(r,a,m);
a=;m=;
}
} void rotate(int x){
int y=p[x],z=p[y];
int l=ch[y][]==x,r=l^;
if(!isroot(y)){
ch[z][ch[z][]==y]=x;
}
p[y]=x;
p[ch[x][r]]=y;
p[x]=z; ch[y][l]=ch[x][r];
ch[x][r]=y; update(y);
// update(x);
} int stk[Maxn],top;
void splay(int x){
stk[top=]=x;
for(int t=x;!isroot(t);stk[++top]=t=p[t]);
for(;top;top--) down(stk[top]);
for(;!isroot(x);){
int y=p[x],z=p[y];
if(!isroot(y)) {
if( (ch[y][]==x) ^ (ch[z][]==y)) rotate(x);
else rotate(y);
}
rotate(x);
}
update(x);
} void access(int x) {
for(int t=;x;x=p[t=x]){
splay(x);
ch[x][]=t;
update(x);
}
} void newroot(int x) {
access(x);
splay(x);
flip[x]^=;
} inline void n_as(int u,int v){
newroot(u);
access(v);
splay(v);
} void Cut(int x,int y) {
n_as(x,y);
ch[y][]=p[x]=;
update(x);
} void Link(int x,int y) {
newroot(x);
p[x]=y;
} int en[Maxn*],next[Maxn*],fir[Maxn];
void Add(int from,int to) {
static int tot=;
en[++tot]=to;
next[tot]=fir[from];
fir[from]=tot;
} void BFS(int u) {
int *q=stk,ql=,qr=;
q[++qr]=u;
for(int x;ql<qr;){
x=q[++ql];
for(int k=fir[x];k;k=next[k]){
int v=en[k];
if(v==p[x]) continue;
p[v]=x;
q[++qr]=v;
}
}
} void init(){
gt(n),gt(m);
for(int u,v,i=;i<n;i++) {
gt(u),gt(v);
// Add(u,v),Add(v,u);
Link(u,v);
}
// BFS(1);
tagm[]=;
for(int i=;i<=n;i++) sz[i]=sum[i]=tagm[i]=w[i]=;
} void work() {
char c;
ll u,v,d;
/*printf("round%d:\n",0);
for(int i=1;i<=n;i++) {
printf("%d :p=%d,ch=(%d,%d),w=%d,taga=%d,tagm=%d\n",i,p[i],ch[i][0],ch[i][1],w[i],taga[i],tagm[i]);
}*/
for(int i=;i<=m;i++) {
for(;;) {
c=gc;
if(c=='+') {
gt(u),gt(v),gt(d);
n_as(u,v);
// tag_add(v,d);
add_tag(v,d,);
break;
}if(c=='-') {
gt(u),gt(v);
Cut(u,v);
gt(u),gt(v);
Link(u,v);
break;
}if(c=='*') {
gt(u),gt(v),gt(d);
n_as(u,v);
add_tag(v,,d);
// tag_mul(v,d);
break;
}if(c=='/'){
gt(u),gt(v);
n_as(u,v);
pt(sum[v]);
pc('\n');
break;
}
}
/*printf("round%d:\n",i);
for(int i=1;i<=n;i++) {
printf("%d :p=%d,ch=(%d,%d),w=%d,taga=%d,tagm=%d,sum=%d\n",i,p[i],ch[i][0],ch[i][1],w[i],taga[i],tagm[i],sum[i]);
}*/
}
} int main() {
#ifdef DEBUG
freopen("in.txt","r",stdin);
// freopen("out.txt","w",stdout);
#endif
fread(in,,D,stdin); init();
work(); return printf(out),;
}

bzoj2631: tree lct的更多相关文章

  1. [bzoj2631]tree——lct

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

  2. bzoj2631 tree LCT 区间修改,求和

    tree Time Limit: 30 Sec  Memory Limit: 128 MBSubmit: 4962  Solved: 1697[Submit][Status][Discuss] Des ...

  3. 【bzoj2631】tree LCT

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

  4. BZOJ2631 tree(伍一鸣) LCT 秘制标记

    这个题一看就是裸地LCT嘛,但是我wa了好几遍,这秘制标记...... 注意事项:I.*对+有贡献 II.先下传*再下传+(因为我们已经维护了+,不能再让*对+产生贡献)III.维护+用到size # ...

  5. [BZOJ2631]tree 动态树lct

    2631: tree Time Limit: 30 Sec  Memory Limit: 128 MBSubmit: 5171  Solved: 1754[Submit][Status][Discus ...

  6. BZOJ2631 tree 【LCT】

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

  7. BZOJ2631: tree(LCT)

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

  8. bzoj2631: tree

    #include <iostream> #include <cstdio> #include <cstring> #include <cmath> #i ...

  9. BZOJ2631——tree

    1.题目大意:bzoj1798的lct版本 2.分析:这个把线段树改成splay就好 #include <stack> #include <cstdio> #include & ...

随机推荐

  1. html 5的localstorag

    随着我们硬件技术的发展,浏览器本身的功能也愈发的完善,从之前的cookie到现在的本地缓存机制,再到web storage,在之前html4 的时候使用cookie具有一些明显的局限,如大小限制,co ...

  2. Sublime Text 3运行JavaScript控制台

    Node.js是一个基于Chrome JavaScript运行时建立的平台,小巧方便搭建.运行的端口可以在浏览器上运行,显示效果,但每次用浏览器也挺麻烦,我们这里讲的是在sublime text2中配 ...

  3. Spring 中的注解

    1.普通方式注解 a.在配置文件中配置 1.导入命名空间              xmlns:context="http://www.springframework.org/schema/ ...

  4. python sklearn模型的保存

    使用python的机器学习包sklearn的时候,如果训练集是固定的,我们往往想要将一次训练的模型结果保存起来,以便下一次使用,这样能够避免每次运行时都要重新训练模型时的麻烦. 在python里面,有 ...

  5. Queue学习

    Queue在Python中可以算作是一种容器,但是他和list,set,dict不一样. 1. Queue不是Python内置类型.它在Queue模块中定义. 2. 它不是iterator容器,他不能 ...

  6. JDK和JRE的区别?

    很多朋友可能跟我一样,已经使用JAVA开发很久了,可是对JDK,JRE,JVM这三者的联系与区别,一直都是模模糊糊的. 今天特写此文,来整理下三者的关系. JDK : Java Development ...

  7. 最简单理解CGI,FastCGI,WSGI

    CGI规定了如何执行本地脚本技术规范(协议),FastCGI规定了如何远程请求执行脚本的技术规范,WSGI规定了如何请求执行Python脚本的规范. 他们的相同点就是envionment variab ...

  8. 如何重载ComboBox 使其下拉按钮(带下箭头的)和下拉列表的垂直滚动条的宽度改变?(自绘ComboBox) [转]

    原文地址:http://bbs.csdn.net/topics/390135022 http://blog.csdn.net/scsdn/article/details/4363299 想使用winf ...

  9. vss报错Workgroup无法访问,您可能没有权限使用网络资源解决办法

    xp下访问svn或者vss的时候只能使用ip进行访问表示很不爽,昨天还好好的,结果就不能使用计算机名字去访问了. 很是郁闷,打开网上邻居之后发现,居然连网上邻居都搜不出来,于是关掉windows自带防 ...

  10. 【Java】String,StringBuffer与StringBuilder的区别??

    String 字符串常量StringBuffer 字符串变量(线程安全)StringBuilder 字符串变量(非线程安全) 简要的说, String 类型和 StringBuffer 类型的主要性能 ...