#include #include #include #include #include using namespace std; const int N = 20500; const int M = 80000; const int P = 16; int dis[P][P],dx[P]; int n,m; int dr[N]; int point[N],to[M],next[M],cc; int tot[N],depth[N],fa[N],num[N],numx[N],top[N]; struct Info { int val[P]; Info operator + (Info x)const { Info res; int i; for(i=0;i'9') && ch!='-') ch=getchar(); bool fan=0; if(ch=='-') { fan=1; ch=getchar(); } while('0'<=ch && ch<='9') { res=res*10+ch-'0'; ch=getchar(); } if(fan) res=-res; return res; } int GetMatrix() { int now=0; int t; t=getint(); if(t) now|=8; t=getint(); if(t) now|=4; t=getint(); if(t) now|=2; t=getint(); if(t) now|=1; return now; } void Init() { int i,j; for(i=0;itot[prefer]) prefer=tox; now=next[now]; } if(!prefer) return; MakeLian(prefer,y,grand); y+=tot[prefer]; now=point[x]; while(now) { int tox=to[now]; if(tox!=fa[x] && tox!=prefer) { MakeLian(tox,y,tox); y+=tot[tox]; } now=next[now]; } } void Replace(Node *x) { x->val=x->lson->val+x->rson->val; } void MakeTree(int x,int l,int r) { tree[x].l=l; tree[x].r=r; tree[x].tot=r-l+1; tree[x].lan=-1; if(lval.val[i]=0; x->val.val[y]=x->tot; x->lan=y; } void Clear(Node *x) { if(x->lan!=-1) { ChangeX(x->lson,x->lan); ChangeX(x->rson,x->lan); x->lan=-1; } } Info Find(Node *x,int l,int r) { if(x->l==l && x->r==r) return x->val; Clear(x); if(r<=x->mid) return Find(x->lson,l,r); if(l>x->mid) return Find(x->rson,l,r); return Find(x->lson,l,x->mid)+Find(x->rson,x->mid+1,r); } void Change(Node *x,int l,int r,int v) { if(x->l==l && x->r==r) { ChangeX(x,v); return; } Clear(x); if(r<=x->mid) Change(x->lson,l,r,v); else if(l>x->mid) Change(x->rson,l,r,v); else { Change(x->lson,l,x->mid,v); Change(x->rson,x->mid+1,r,v); } Replace(x); } void GetAns(int x,int y,int z) { int i; Info res; for(i=0;i