bzoj2631】的更多相关文章

这两题都是link cut tree的裸题之前看Qtree的论文,只会在确定父子关系的情况下连边和删边如果在任意两个点连边删边怎么做呢?这时候我们不能随意的将一个点的父节点设为另一个点,因为其中某个点的父节点可能已经被设为另外某点了其实很简单,连边的时候,我们只要把x变成其所在原树的根,这样x是没有父节点了然后把x的父节点设为y即可,删边.询问路径的道理类似,具体见程序给出的是bzoj2631的程序 ; ..] of longint; rev:..] of boolean; son:..,..]…
tree bzoj-2631 题目大意:给定一个n个点的树,每个点的初始权值为1,支持:删边加边(这两个操作同时进行,保证操作之后还是一棵树),路径加,路径乘,查询路径和. 注释:$1\le n,q\le 10^5$,$1\le c \le 10^4$. 想法:暴力给的很优雅:15‘没有加边删边且保证是链,我们直接用线段树维护.50'没有加边删边,我们裸上树剖+线段树.满分的话我们用LCT维护加边删边. 具体地:我的习惯是先×后+,所以每一次乘法都先将加法标记也进行修改.询问的话直接makero…
#include <iostream> #include <cstdio> #include <cstring> #include <cmath> #include <algorithm> #define mod 51061 #define maxn 100005 #define ll unsigned int using namespace std; ],size[maxn]; bool rev[maxn]; ll val[maxn],lazy…
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…
2016-06-01 08:50:36 题目:http://www.lydsy.com/JudgeOnline/problem.php?id=2631 注意加和乘的标记下传问题. 还有就是split后,要分清x和y哪个是祖先. pushup在access和rotate后都要进行. 这题还卡常数,开ll就会T,开unsigned int即可. #include<bits/stdc++.h> #define inf 1000000000 #define uint unsigned int #def…
要打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; ; *],*I=in,*O=out; #…
用LCT实现路径加,路径乘,断开及加上一条边(保证是树),查询路径和. #include <cstdio> #include <algorithm> #define l(x) t[x].s[0] #define r(x) t[x].s[1] #define f(x) t[x].f #define lc(x) (r(f(x)) == x) #define int unsigned int , p = ; ]; int n,m,x,y,c,tp,q[N]; ],sm,sz,mu,ad,…
Description 一棵n个点的树.每一个点的初始权值为1. 对于这棵树有q个操作,每一个操作为下面四种操作之中的一个: + u v c:将u到v的路径上的点的权值都加上自然数c: - u1 v1 u2 v2:将树中原有的边(u1,v1)删除,增加一条新边(u2,v2),保证操作完之后仍然是一棵树: * u v c:将u到v的路径上的点的权值都乘上自然数c: / u v:询问u到v的路径上的点的权值和.求出答案对于51061的余数. Input 第一行两个整数n,q 接下来n-1行每行两个正…
题解: lct+链上修改 每一次修改的时候记录lazy标记 如果有了乘法,加法的lazy标记也要相应的随之变化 代码: #pragma GCC optimize(2) #include<bits/stdc++.h> ,N=; typedef unsigned ll; using namespace std; int read() { ;char ch=getchar(); ';ch=getchar()); +ch-'; return x; } ],fa[N],size[N],q[N],rev[…
题目描述 一棵n个点的树,每个点的初始权值为1.对于这棵树有q个操作,每个操作为以下四种操作之一:+ u v c:将u到v的路径上的点的权值都加上自然数c:- u1 v1 u2 v2:将树中原有的边(u1,v1)删除,加入一条新边(u2,v2),保证操作完之后仍然是一棵树:* u v c:将u到v的路径上的点的权值都乘上自然数c:/ u v:询问u到v的路径上的点的权值和,求出答案对于51061的余数. 输入 第一行两个整数n,q接下来n-1行每行两个正整数u,v,描述这棵树接下来q行,每行描述…
这个题一看就是裸地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()…
Brief Description 一棵n个点的树,每个点的初始权值为1.对于这棵树有q个操作,每个操作为以下四种操作之一: u v c:将u到v的路径上的点的权值都加上自然数c: u1 v1 u2 v2:将树中原有的边(u1,v1)删除,加入一条新边(u2,v2),保证操作完之后仍然是一棵树: u v c:将u到v的路径上的点的权值都乘上自然数c: / u v:询问u到v的路径上的点的权值和,求出答案对于51061的余数. Algorithm Design lct裸题.考察标记下传,先下传乘法…
2631: tree Time Limit: 30 Sec  Memory Limit: 128 MBSubmit: 5171  Solved: 1754[Submit][Status][Discuss] Description 一棵n个点的树,每个点的初始权值为1.对于这棵树有q个操作,每个操作为以下四种操作之一:+ u v c:将u到v的路径上的点的权值都加上自然数c:- u1 v1 u2 v2:将树中原有的边(u1,v1)删除,加入一条新边(u2,v2),保证操作完之后仍然是一棵树:* u…
题面 Description: 一棵\(n\)个点的树,每个点的初始权值为\(1\).对于这棵树有\(q\)个操作,每个操作为以下四种操作之一: + u v c:将\(u\)到\(v\)的路径上的点的权值都加上自然数\(c\): - u1 v1 u2 v2:将树中原有的边\(u1-v1\)删除,加入一条新边\(u2-v2\),保证操作完之后仍然是一棵树: * u v c:将\(u\)到\(v\)的路径上的点的权值都乘上自然数\(c\): / u v:询问\(u\)到\(v\)的路径上的点的权值和…
题目 一棵n个点的树,每个点的初始权值为1.对于这棵树有q个操作,每个操作为以下四种操作之一: + u v c:将u到v的路径上的点的权值都加上自然数c: - u1 v1 u2 v2:将树中原有的边(u1,v1)删除,加入一条新边(u2,v2),保证操作完之后仍然是一棵树: * u v c:将u到v的路径上的点的权值都乘上自然数c: / u v:询问u到v的路径上的点的权值和,求出答案对于51061的余数. 输入格式 第一行两个整数n,q 接下来n-1行每行两个正整数u,v,描述这棵树 接下来q…
tree Time Limit: 30 Sec  Memory Limit: 128 MBSubmit: 4962  Solved: 1697[Submit][Status][Discuss] Description 一棵n个点的树,每个点的初始权值为1.对于这棵树有q个操作,每个操作为以下四种操作之一:+ u v c:将u到v的路径上的点的权值都加上自然数c:- u1 v1 u2 v2:将树中原有的边(u1,v1)删除,加入一条新边(u2,v2),保证操作完之后仍然是一棵树:* u v c:将…
Link-Cut-Tree 的懒标记下传正确食用方法. 我们来逐步分析每一个操作. 1:+ u v c:将u到v的路径上的点的权值都加上自然数c; 解决方法: 很显然,我们可以 split(u,v) 来提取u,v这一段区间,提取完了将 Splay(v),然后直接在v上打加法标记add即可. 代码: inline void pushadd(ll x,ll val){//打标记 s[x]+=sz[x]*val,v[x]+=val,add[x]+=val; s[x]%=MOD,v[x]%=MOD,ad…
Description 一棵n个点的树,每个点的初始权值为1.对于这棵树有q个操作,每个操作为以下四种操作之一: + u v c:将u到v的路径上的点的权值都加上自然数c: - u1 v1 u2 v2:将树中原有的边(u1,v1)删除,加入一条新边(u2,v2),保证操作完之后仍然是一棵树: * u v c:将u到v的路径上的点的权值都乘上自然数c: / u v:询问u到v的路径上的点的权值和,求出答案对于51061的余数. Input 第一行两个整数n,q 接下来n-1行每行两个正整数u,v,…
[BZOJ1861][BZOJ3224] [BZOJ2733][BZOJ1056] [BZOJ2120][BZOJ3673] [BZOJ1833][BZOJ1026] [BZOJ3209][BZOJ1096] [BZOJ1597][BZOJ1492] [BZOJ3156][BZOJ3437] [BZOJ3675][BZOJ1911] [BZOJ1996][BZOJ1801] [BZOJ1806][BZOJ1207] [BZOJ3172][BZOJ2594] [BZOJ2157][BZOJ1054…
1.题目大意:区间修改乘法操作和加法操作,求区间和 2.分析:为了填补bzoj2631的坑还是写一发题解吧,首先呢,既然想要双标记,但是这两个标记之间又有着制约作用,所以要定义优先级,这个优先级就定义为乘法先,加法后吧...那个一个区间的标记无非就是乘a加b,那么重点就是如何下传标记了.首先儿子有两个标记c,d,父亲有两个标记a,b, 那么c就等于c乘a啦,而d等于d乘a加b(从操作的先后顺序考虑)很显然吧.于是问题就解决了 3.代码:( 当时的线段树姿势丑陋,求轻喷 #include <cst…
从六月一号开始记录啦 6月1日 link-cut-tree BZOJ2631 tree                                     …
LCT真是灵活好用… LCT的基本思想与树链剖分差不多,都是把树剖成一条条链,只不过LCT用的是SPLAY维护的,而且,SPLAY的链是会变化的,不像剖分是定死的. LCT最重要的操作就是access(有的地方叫expose),access(po)之后就把po到树的root这条路径变成一条链. 具体实现的话,直接向上一直连就行了,效率可以证明是O(lgn)的. 还有就是两个操作,link和cut. cut不难,直接找到这条边断掉即可. link的话,因为splay是用深度维护的,我们只需要acc…
Day 0 和南师附中诸人去杭州,想到这是第三次去杭州有点感动 想到noi还要在杭州,简直…… 火车站接送好评如潮 ym大学军,到学军领资料然后到浙大宿舍安顿,noi的书包还是挺不错的 看起来宿舍还可以,我住在316,附中的人住在315(其实不是隔壁) 同宿舍的还有JX的ljl,南外的yyl(之前就认识),还有: 神犇wyt!!!无限Orz 中午去吃饭,大学军的伙食真是非常良心,事实证明之后几天的伙食一直很好 下午发现宿舍基本没网,估摸着只能到315蹭网了,于是逛了逛浙大,感觉环境好像没有南大好…
counter: 664BZOJ1601 BZOJ1003 BZOJ1002 BZOJ1192 BZOJ1303 BZOJ1270 BZOJ3039 BZOJ1191 BZOJ1059 BZOJ1202 BZOJ1051 BZOJ1001 BZOJ1588 BZOJ1208 BZOJ1491 BZOJ1084 BZOJ1295 BZOJ3109 BZOJ1085 BZOJ1041 BZOJ1087 BZOJ3038 BZOJ1821 BZOJ1076 BZOJ2321 BZOJ1934 BZOJ…
好吧我并不想讲LCT 只是贴4个代码~ [BZOJ2049][Sdoi2008]Cave 洞穴勘测 #include <cstdio> #include <cstring> #include <iostream> #define isr(A) (s[s[A].fa].ch[0]!=A&&s[s[A].fa].ch[1]!=A) using namespace std; const int maxn=10010; int n,m; struct NODE…
bzoj2631(权限题...):链接 落咕:链接 考察的是LCT维护链上信息. 但是这个题不一样的是又有加法又有乘法...(有木有想到落咕的模板--线段树2qwq) 因为乘法的运算优先度比加法高,所以我们要先做乘法再做加法(证明?去看线段树2的题解吧),push_down的时候要注意一下. 处理一条路径的时候,直接split拉出来,然后在根节点进行修改就行了,push_down的时候会把它的标记传递下去,也就完成了一条路径上的加乘操作. 注意计算乘法的时候别忘了*1ll,因为有可能爆int(好…
Link-cut tree(LCT)[可以理解为树链剖分+splay] 给出如下定义: access(x):访问x节点 perferred child:若以x为根的子树中最后被访问的节点在以x的儿子y为根的子树中,则称y为节点x的preferred child preferred edge:节点x与其preferred child之间的边 preferred path:由preferred edge组成的路径 每条preferred path用splay维护,记录splay的根接到上条重链的哪个…
沿着黄学长的步伐~~ 红色为已刷,黑色为未刷,看我多久能搞完吧... Update on 7.26 :之前咕了好久...(足见博主的flag是多么emmm......)这几天开始会抽时间刷的,每天几道就行了. BZOJ1601 BZOJ1003 BZOJ1002 BZOJ1192 BZOJ1303 BZOJ1270 BZOJ3039 BZOJ1191 BZOJ1059 BZOJ1202 BZOJ1051 BZOJ1001 BZOJ1588 BZOJ1208 BZOJ1491 BZOJ1084 B…