bzoj 1095
来源:互联网 发布:牛菲特软件 编辑:程序博客网 时间:2024/06/06 10:07
神题啊。。。
括号序列做法;
代码扒的hwzer的…
#include<bits/stdc++.h>#define rep(i,k,n) for(int i=k;i<=n;i++)#define ls x<<1#define rs x<<1|1using namespace std;const int N=100005;const int N2=500005;const int inf=1000000000;int head[N],tot=0;struct E{int to,next;E(int to=0,int next=0):to(to),next(next){}}edge[2*N];void add(int x,int y){ edge[++tot]=E(y,head[x]);head[x]=tot; edge[++tot]=E(x,head[y]);head[y]=tot; }int c[N],black=0,v[N2],n,Q,pos[N];inline int max(int a,int b,int c){ return max(max(a,b),c);}struct seg{ int c1,c2,r1,r2,l1,l2,dis; void ini(int x){ dis=-inf; c1=c2=0; if(v[x]==-9)c1=1; if(v[x]==-6)c2=1; // ][ 长这样! if(v[x]>0 && c[v[x]]) r1=r2=l1=l2=0; else r1=r2=l1=l2=-inf; }}t[2000005];int top=0;void dfs(int x,int fa){ v[++top]=-6; v[++top]=x; pos[x]=top; for(int i=head[x];i;i=edge[i].next){ int vv=edge[i].to; if(vv!=fa) dfs(vv,x); } v[++top]=-9;}inline seg merge(seg s1,seg s2){ seg s; int a=s1.c1,b=s1.c2,c=s2.c1,d=s2.c2; s.dis=max(s1.dis,s2.dis); s.dis=max(s.dis,s1.r1 + s2.l2 , s1.r2 + s2.l1); if(c>b)s.c1=a+c-b,s.c2=d; else s.c1=a,s.c2=d+b-c; s.r1=max(s1.r1-c+d , s1.r2+c+d , s2.r1); s.r2=max(s1.r2+c-d , s2.r2); s.l1=max(s2.l1-b+a,s2.l2 + b+a , s1.l1); s.l2=max(s2.l2+b-a , s1.l2); return s;}void build(int x,int l,int r){ if(l==r){t[x].ini(l);return;} int mid=(l+r)>>1; build(ls,l,mid); build(rs,mid+1,r); t[x]=merge(t[ls],t[rs]);}void change(int x,int l,int r,int q){ if(l==r){t[x].ini(l);return;} int mid=(l+r)>>1; if(q<=mid)change(ls,l,mid,q); else change(rs,mid+1,r,q); t[x]=merge(t[ls],t[rs]);}int main(){//freopen("in.in","r",stdin);//freopen("out.out","w",stdout); scanf("%d",&n);int x,y; black=n;rep(i,1,n)c[i]=1; rep(i,1,n-1){scanf("%d%d",&x,&y);add(x,y); } dfs(1,0);// rep(i,1,top)printf("%d ",v[i]); build(1,1,top); scanf("%d",&Q); char s[20]; while(Q--){ scanf("%s",s); if(s[0]=='C'){ scanf("%d",&x); c[x] ? black-- : black++; c[x]^=1; change(1,1,top,pos[x]); } else { if(!black)puts("-1"); if(black==1)puts("0"); else printf("%d",t[1].dis); printf("\n"); } } return 0; }
0 0
- bzoj 1095
- bzoj 1095
- 动态点分治:bzoj 3730,bzoj 1095
- bzoj-1095 Hide 捉迷藏
- [BZOJ ]
- BZOJ****-****
- BZOJ
- BZOJ
- BZOJ
- BZOJ
- BZOJ
- BZOJ
- BZOJ
- BZOJ
- BZOJ
- BZOJ
- bzoj
- bzoj
- JavaScript反选-全选-全不选代码
- 线性表的
- 分布式计算——远程对象和远程方法的调用
- KNN算法
- 典型的错误码和错误信息匹配代码------本质就是key value匹配
- bzoj 1095
- MarkDown 行首缩进
- 复位windows网络参数的方法
- android开发之应用Crash自动抓取Log_自动保存崩溃日志到本地
- << React Native 入门与实战>>----第3章 常用组件及实战
- ecshop:Warning: strpos(): Empty delimiter in E:\WebRoot\...\includes\lib_main.php on line1995
- iOS的Http、TCP、UDP
- android_ListView的操作
- 是时候复习一下Java基础了(三)