【CodeForces】343D Water Tree
来源:互联网 发布:兰州ps软件班 编辑:程序博客网 时间:2024/05/15 03:47
应该不需要传送门了……
Solution
两个操作,灌水和抽水。
灌水相当于子树覆盖,抽水是链覆盖。
那么维护一下一颗子树中是否有抽过水,在灌水的时候,如果子树中有抽水标记,那么清除标记,并在子树根的父亲的位置打个标记。
【即先抽再灌等于在子树根的父亲的位置抽】
DFN序再用线段树搞搞就好
#include<stdio.h>#define N 500005#define cint const int &int s[N],tot,cnt,sum,dfn[N],ed[N],L,R,aim,n,q,f[N],rt;bool flag;struct edge{int v,n;}e[N<<1];inline void push(cint u,cint v){e[++tot]=(edge){v,s[u]};s[u]=tot;}void dfs(cint k){ ed[k]=dfn[k]=++cnt; for (int i=s[k];i;i=e[i].n) if (!dfn[e[i].v]) dfs(e[i].v),f[e[i].v]=k,ed[k]=ed[e[i].v];}struct seg{int k,lson,rson;}t[N<<1];void build(int &k,cint l,cint r){ t[k=++sum].k=1; if (l==r) return; int mid=l+r>>1; build(t[k].lson,l,mid); build(t[k].rson,mid+1,r);}void que(cint k,cint l,cint r){ if (L<=l && r<=R){if (t[k].k) flag=1;return;} int mid=l+r>>1; if (L<=mid) que(t[k].lson,l,mid); if (mid<R) que(t[k].rson,mid+1,r);}void ch1(cint k,cint l,cint r){ if (L<=l && r<=R){if (!t[k].k) return;flag=1;} if (l==r){t[k].k=0;return;} int mid=l+r>>1; if (L<=mid) ch1(t[k].lson,l,mid); if (mid<R) ch1(t[k].rson,mid+1,r); t[k].k=t[t[k].lson].k||t[t[k].rson].k;}void ch0(cint k,cint l,cint r){ t[k].k=1; if (l==r) return; int mid=l+r>>1; if (aim<=mid) ch0(t[k].lson,l,mid); else ch0(t[k].rson,mid+1,r);}int main(){ scanf("%d",&n); for (int i=1,u,v;i<n;i++) scanf("%d%d",&u,&v),push(u,v),push(v,u); dfs(1); build(rt,1,n); scanf("%d",&q); for (int type;q--;) { scanf("%d%d",&type,&aim); if (type==1) { L=dfn[aim];R=ed[aim];flag=0;ch1(1,1,n); if (flag && (aim=dfn[f[aim]])) ch0(1,1,n); } if (type==2) aim=dfn[aim],ch0(1,1,n); if (type==3) { L=dfn[aim];R=ed[aim];flag=0; que(1,1,n); if (flag) puts("0"); else puts("1"); } }}
0 0
- Codeforces 343D Water Tree
- CodeForces 343D Water Tree
- codeforces 343D - Water Tree
- Codeforces 343D Water Tree
- Codeforces 343D Water Tree
- CODEFORCES 343D. Water Tree
- CodeForces 343D Water Tree
- 【CodeForces】343D Water Tree
- Codeforces 343 D Water Tree
- Codeforces 343D-Water Tree
- 【CodeForces】343D Water Tree 线段树
- Codeforces 343D Water Tree 题解&代码
- codeforces 343 D. Water Tree (树链剖分)
- Codeforces 343D Water Tree 题解&代码
- Codeforces-343D:Water Tree(树链剖分)
- 【Codeforces Round #200 (Div. 1)】Codeforces 343D Water Tree
- Codeforces 343D Water Tree dfs序+线段树
- CodeForces 343D Water Tree(树链剖分+dfs时间戳)
- 1039. 到底买不买(20)
- go语言快速入门:流程控制(7)
- iOS中解决后台返回的null导致的崩溃问题
- 1040. 有几个PAT(25)
- 高并发简单解决方案-redis缓存队列+mysql 批量入库+php离线整合
- 【CodeForces】343D Water Tree
- 【BZOJ 1180】[CROATIAN2009]OTOCI LCT
- 10.2 信号处理
- VTK修炼之道48:图形基本操作进阶_符号化操作与模型区率计算
- Redis使用详细教程
- windows下安装lxml
- jquery入门
- Leetcode 109. Convert Sorted List to Binary Search Tree
- python2.7 or not 运算符规则