有毒

第一开始一直RE,我就把dfs改成了bfs

结果一直TLE,自己造的数据要跑8s

因为 lxl 等人讲随机 $\sqrt{n}$ 个点作为关键点就可以了

但是我把随机改成深度有关就AC了,而且那组数据跑了200ms

#pragma GCC optimize(3)
#include<bits/stdc++.h>
using namespace std;
#define rep(i,a,b) for(int i=(a),i##_end=(b);i<=i##_end;++i)
#define For(i,a,b) for(int i=(a),i##_end=(b);i<i##_end;++i)
#define per(i,a,b) for(int i=(b),i##_st=(a);i>=i##_st;--i)
#define fi first
#define se second
#define pb push_back
#define mp make_pair
#define dbg(x) cerr<<#x" = "<<x<<endl
#define debug(...) fprintf(stderr, __VA_ARGS__)
#define Es(x,i) for(Edge*i=G[x];i;i=i->nxt)
typedef long long ll;
typedef pair<int,int> pii;
const int inf=~0u>>1,MOD=1e9+7;
char *TT,*mo,but[(1<<15)+2];
#define getchar() ((TT==mo&&(mo=((TT=but)+fread(but,1,1<<15,stdin)),TT==mo))?-1:*TT++)
inline int rd() {
int x,c,f=1;while(!isdigit(c=getchar()))f=c!='-';x=c-'0';
while(isdigit(c=getchar()))x=x*10+c-'0';return f?x:-x;
}
#define Q 64
const int N=100011,MX=30000/Q+2,Modx=131;
typedef unsigned long long ui;
#define lb _lb_
int fx[1<<16],fy[Modx];
inline int pcal(){
For(i,1,1<<16)fx[i]=fx[i^(i&-i)]+1;
ui t=1;
fy[1]=0;
For(i,1,Q)t<<=1,fy[t%Modx]=i;
}
inline int cal1(unsigned int i){
//cout<<i<<" f "<<fx[i&((1<<16)-1)]+fx[i>>16]<<endl;
return fx[i&((1<<16)-1)]+fx[i>>16];
} inline int cal(ui i){
unsigned int a=i>>32,b=i&(~0ull);
return cal1(a)+cal1(b);
}
inline int lb(ui i){
return fy[i%Modx];
}
struct bs{
ui w[MX];
bs (int _t=1){if(!_t)memset(w,0,sizeof w);}
void Ci(){memset(w,0,sizeof w);}
//inline uint&operator&(int i){return w[i];}
void operator|=(const bs&b){
For(i,0,MX)this->w[i]|=b.w[i];
} bs operator|(const bs&b)const{
static bs c;
c.Ci();
For(i,0,MX)c.w[i]=w[i]|b.w[i];
return c;
}
inline void in(int i){
int j=i>>6;i&=(63);
w[j]|=(1ull<<i);
}
inline pii query(){
static const ui I=~0ull;
//cerr<<I<<endl;
//int t=clock();
int a=0,b;
For(i,0,MX)if(w[i]!=I){
ui t=w[i];int p=0;
t=~t;
t=t&-t;
//while(t&1)t>>=1,++p;
b=(i<<6)+lb(t);break;
}
For(i,0,MX)if(w[i]){
a+=cal(w[i]);
//cout<<i<<" "<<w[i]<<endl;
}
//dbg(clock()-t);
return mp(a,b);
}
#undef Q
} b[(int)(1.8*N+1000)],*it=b;
struct Edge{int v;Edge*nxt;}pl[N<<1],*cur=pl,*G[N];
inline void ins(int u,int v){*cur=(Edge){v,G[u]},G[u]=cur++;}
int n,rt,a[N],m,bel[N],fa[N];
int L[N],tot;
int Top[N],dep[N],son[N],sz[N],q[N];
inline void dfs(int S){
int h,t=1;q[h=0]=S;
while(h<t){
int x=q[h++];
dep[x]=dep[fa[x]]+1,sz[x]=1;
Es(x,i)if(i->v!=fa[x]){
fa[q[t++]=i->v]=x;
}
}
per(o,0,t-1){
int x=q[o];
Es(x,i)if(i->v!=fa[x]){
sz[x]+=sz[i->v];
if(sz[i->v]>sz[son[x]])son[x]=i->v;
}
}
For(o,0,t){
int x=q[o];
Top[x]=(son[fa[x]]==x)?Top[fa[x]]:x;
}
}
inline void dfs2(int S){
For(o,0,n){
int x=q[o];
L[x]=tot; if(!bel[x])bel[x]=bel[fa[x]];
else if(x!=rt){
it->in(a[x]);
int t=fa[x],y=bel[t],lst=-1;
while(bel[t]==y){
it->in(a[t]);
lst=t,t=fa[t];
}
++tot,++it;
while(t>0){
*it=b[L[lst]]|*(it-1);
++it,++tot;
if((lst=bel[t])==-1)break;
else t=fa[lst];
}
//R[x]=tot;
} } }
inline void Init(){
rt=rand()%n+1;
dfs(rt);
rep(i,1,n){
if(dep[i]%200==0)bel[i]=i;
}
bel[rt]=-1;
dfs2(rt);
}
bs A;
inline int lca(int x,int y){
while(Top[x]!=Top[y]){
if(dep[Top[x]]<dep[Top[y]])swap(x,y);
x=fa[Top[x]];
}
return dep[x]<dep[y]?x:y;
}
inline void query(int x,int y){
//int t=clock();
int l=lca(x,y);
{
//dbg(x),dbg(rt),dbg(l);
while(bel[x]!=x&&x!=l)A.in(a[x]),x=fa[x];//dbg(x);
if(bel[x]==x){
int e=L[x],f=x,g=bel[fa[x]];
while(g>0&&dep[g]>=dep[l])++e,f=g,g=bel[fa[g]];
if(e>L[x])A|=b[e-1];//cout<<"fff\n";;
while(f!=l)A.in(a[f]),f=fa[f];
}
}
//cerr<<"OK1"<<endl;
swap(x,y);
{
while(bel[x]!=x&&x!=l)A.in(a[x]),x=fa[x];
if(bel[x]==x){
int e=L[x],f=x,g=bel[fa[x]];
while(g>0&&dep[g]>=dep[l])++e,f=g,g=bel[fa[g]];
if(e>L[x])A|=b[e-1];//cout<<"fff\n";;
while(f!=l)A.in(a[f]),f=fa[f];
}
}
A.in(a[l]);
}
int main(){
#ifdef flukehn
freopen("test.txt","r",stdin);
freopen("out.txt","w",stdout);
#endif
srand((unsigned long long)(new char));
pcal();
n=rd();int q=rd(),f=rd(),lst=0;
rep(i,1,n)a[i]=rd();
For(i,1,n){
int x=rd(),y=rd();
ins(x,y),ins(y,x);
}
Init();
// dbg(clock());
// if(n>=90000)return 0;
while(q--){
//cerr<<q<<endl;
//int t=clock();
A.Ci();
int a=rd();
while(a--){int x=rd()^(f?lst:0),y=rd()^(f?lst:0);query(x,y);}
//cerr<<q<<endl;
pii tmp=A.query();
lst=tmp.fi+tmp.se;
printf("%d %d\n",tmp.fi,tmp.se);
//dbg(clock()-t);
//cerr<<q<<endl;
} // cerr<<clock()<<endl;
}

BZOJ 4763的更多相关文章

  1. [BZOJ 4763]雪辉

    [BZOJ 4763] 雪辉 题意 给定一棵 \(n\) 个点的无根树, 点带权. \(q\) 次询问, 每次给定树上的若干路径, 求这些路径上的点共有多少种不同权值以及这些点的权值组成的集合的 \( ...

  2. 洛谷P3603 || bzoj 4763 雪辉 && bzoj4812: [Ynoi2017]由乃打扑克

    https://www.luogu.org/problemnew/show/P3603 https://www.lydsy.com/JudgeOnline/problem.php?id=4763 就是 ...

  3. BZOJ 2127: happiness [最小割]

    2127: happiness Time Limit: 51 Sec  Memory Limit: 259 MBSubmit: 1815  Solved: 878[Submit][Status][Di ...

  4. BZOJ 3275: Number

    3275: Number Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 874  Solved: 371[Submit][Status][Discus ...

  5. BZOJ 2879: [Noi2012]美食节

    2879: [Noi2012]美食节 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 1834  Solved: 969[Submit][Status] ...

  6. bzoj 4610 Ceiling Functi

    bzoj 4610 Ceiling Functi Description bzoj上的描述有问题 给出\(n\)个长度为\(k\)的数列,将每个数列构成一个二叉搜索树,问有多少颗形态不同的树. Inp ...

  7. BZOJ 题目整理

    bzoj 500题纪念 总结一发题目吧,挑几道题整理一下,(方便拖板子) 1039:每条线段与前一条线段之间的长度的比例和夹角不会因平移.旋转.放缩而改变,所以将每条轨迹改为比例和夹角的序列,复制一份 ...

  8. 【sdoi2013】森林 BZOJ 3123

    Input 第一行包含一个正整数testcase,表示当前测试数据的测试点编号.保证1≤testcase≤20. 第二行包含三个整数N,M,T,分别表示节点数.初始边数.操作数.第三行包含N个非负整数 ...

  9. 【清华集训】楼房重建 BZOJ 2957

    Description 小A的楼房外有一大片施工工地,工地上有N栋待建的楼房.每天,这片工地上的房子拆了又建.建了又拆.他经常无聊地看着窗外发呆,数自己能够看到多少栋房子. 为了简化问题,我们考虑这些 ...

随机推荐

  1. 缓存服务—Redis

    Redis 简介Redis 是一个开源(BSD 许可)的.内存中的数据结构存储系统,它可以用作数据库.缓存和消息中间件. 为什么要用 Redis 在高并发场景下,如果需要经常连接结果变动频繁的数据库, ...

  2. 主机管理+堡垒机系统开发:strace命令及日志解析(五)

    一.strace命令简介 测试命令截图 第一个窗口执行命令如下 [root@elk ~]# w 16:51:56 up 3 days, 6:01, 3 users, load average: 0.0 ...

  3. 浅谈PageHelper插件分页实现原理及大数据量下SQL查询效率问题解决

    前因:项目一直使用的是PageHelper实现分页功能,项目前期数据量较少一直没有什么问题.随着业务扩增,数据库扩增PageHelper出现了明显的性能问题.几十万甚至上百万的单表数据查询性能缓慢,需 ...

  4. 第三节:框架前期准备篇之利用Newtonsoft.Json改造MVC默认的JsonResult

    一. 背景 在MVC框架中,我们可能经常会用到 return Json(),而Json方法内部又是一个JsonResult类,那么JsonResult内部又是什么原理呢?在MVC框架中,各种xxxRe ...

  5. spring和mybatis的整合开发(基于MapperScannerConfigurer的整合开发(适用于复杂项目,接口较多的情况))

    在实际项目中,Dao层会包含很多接口,这样会导致spring配置文件过于臃肿.这时就需要采用扫描包的形式来配置mybaits中的映射器. 采用MapperScannerConfigurer来实现. M ...

  6. Java反射定义、获取Class三种方法

    反射机制的定义: 在运行状态时(动态的),对于任意一个类,都能够得到这个类的所有属性和方法.  对于任意一个对象,都能够调用它的任意属性和方法. Class类是反射机制的起源,我们得到Class类对象 ...

  7. babel

    一款可以将 ES6 代码转换为 ES5 代码的转译器. 官网:http://babeljs.io/ 中文:https://www.babeljs.cn/

  8. sql优化------查询整个表按照某个字段排序后的前几条

    后续补充

  9. Django之auth模块

    http://www.cnblogs.com/liwenzhou/p/9030211.html 1.首先导入auth模块 from django.contrib import auth 2.创建aut ...

  10. tengine2.2.3报错502的The proxy server received an invalid response from an upstream server问题处理

    tengine2.2.3报错502的The proxy server received an invalid response from an upstream server问题处理 现象:访问订单的 ...