bzoj2631: tree lct
要打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的更多相关文章
- [bzoj2631]tree——lct
Brief Description 一棵n个点的树,每个点的初始权值为1.对于这棵树有q个操作,每个操作为以下四种操作之一: u v c:将u到v的路径上的点的权值都加上自然数c: u1 v1 u2 ...
- bzoj2631 tree LCT 区间修改,求和
tree Time Limit: 30 Sec Memory Limit: 128 MBSubmit: 4962 Solved: 1697[Submit][Status][Discuss] Des ...
- 【bzoj2631】tree LCT
题目描述 一棵n个点的树,每个点的初始权值为1.对于这棵树有q个操作,每个操作为以下四种操作之一:+ u v c:将u到v的路径上的点的权值都加上自然数c:- u1 v1 u2 v2:将树中原有的边( ...
- BZOJ2631 tree(伍一鸣) LCT 秘制标记
这个题一看就是裸地LCT嘛,但是我wa了好几遍,这秘制标记...... 注意事项:I.*对+有贡献 II.先下传*再下传+(因为我们已经维护了+,不能再让*对+产生贡献)III.维护+用到size # ...
- [BZOJ2631]tree 动态树lct
2631: tree Time Limit: 30 Sec Memory Limit: 128 MBSubmit: 5171 Solved: 1754[Submit][Status][Discus ...
- 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 ...
- bzoj2631: tree
#include <iostream> #include <cstdio> #include <cstring> #include <cmath> #i ...
- BZOJ2631——tree
1.题目大意:bzoj1798的lct版本 2.分析:这个把线段树改成splay就好 #include <stack> #include <cstdio> #include & ...
随机推荐
- CSAPP LAB: Buffer Overflow
这是CSAPP官网上的著名实验,通过注入汇编代码实现堆栈溢出攻击.实验材料可到我的github仓库 https://github.com/Cheukyin/CSAPP-LAB/ 选择buffer-ov ...
- TestNG扩展
1. TestNG API 本章节将讨论如何使用TestNG API来创建自己的TestNG对象.TestNG的API基本由接口组成,这样做是为了容易模拟TestNG返回的对象. 1.1 org.te ...
- Java学习----集合框架总结
集合框架总结: Collection接口: Set接口: HashSet//对象必须实现hashCode方法,元素没有顺序呢,效率比LinkedHashSet高 LinkedHashSet//是Has ...
- php基础知识【函数】(4)时间date
一.time() -- 返回当前的 Unix 时间戳 $nextWeek = time() + (7 * 24 * 60 * 60); echo 'Next Week: '. date('Y-m-d' ...
- 你知道HTML标签设计的本意吗? 把HTML标签用到该用的地方去
"DIV+CSS"这个词汇不知道害了多少人,也许其提出者本意并没有错,但是跟风者从表现曲解了其意思,认为整个页面就应当是DIV+CSS文件的组合.这样做,对于视觉上并没有什么影响, ...
- DM9000C网卡驱动程序移植
1.取消版本号不符终止程序运行 2.iobase基地址修改为s3c3440的0x20000000 3.网卡使用的中断号改为IRQ_EINT7 4.中断触发方式改为上升沿触发 5.设置S3C2440的m ...
- windows server 2012安装.net framework3.5失败解决方法
1.点击开始运行,输入 gpedit.msc,打开“组策略”2.“计算机配置”---“管理模板”---“windows 组件”---“windows 更新”,然后双击“指定 Intranet Micr ...
- SQL语句操作大全
SQL语句操作大全 本文分为以下六个部分: 基础部分 提升部分 技巧部分 数据开发–经典部分 SQL Server基本函数部分 常识部分 一.基础 1.说明:创建数据库CREATE DATABAS ...
- 最新iOS 6 in Xcode4.5新特性——Storyboard和属性自动绑定
最新iOS 6 in Xcode4.5新特性编程之二(上)——Storyboard和属性自动绑定 从Xcode 4.3开始,Storyboard 就是iOS 5和iOS 6中令人兴奋的一个新特性,他将 ...
- WSGI规格说明书
PEP 333 这应该是WSGI最权威的文档了 http://www.python.org/dev/peps/pep-3333/ 值翻译了最重要的前面部分,后面读者可以参考 当然文档有些生硬,欢迎 ...