我们造一颗树,把B集合对应到树上,点i的B集合即为i到根的路径上的所有点,这样在构造点x的B集合的时候就相当于把所有A集合里的点取LCA,然后再LCA下面接上x

询问就相当于求询问点到根的路径并的长度,构虚树,每个点贡献为其深度减去其虚树上父亲的深度,不需要实际构造虚树,只要求出每个点的虚父亲即可

其实可以不用虚树,按dfn排序后所有点的dep减去每个相邻两点的lca的dep即可

有点卡常,加上读入优化就好了

#include<iostream>
#include<cstdlib>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<ctime>
#include<algorithm>
#include<iomanip>
#include<vector>
#include<stack>
#include<queue>
#include<map>
#include<set>
#include<bitset>
using namespace std;
#define MAXN 200010
#define MAXM 1010
#define ll long long
#define INF 1000000000
#define MOD 1000000007
#define eps 1e-8
char xB[1<<15],*xS=xB,*xT=xB;
#define getc() (xS==xT&&(xT=(xS=xB)+fread(xB,1,1<<15,stdin),xS==xT)?0:*xS++)
inline int read(){char ch=getc();int f=1,x=0;while(!(ch>='0'&&ch<='9')){if(ch=='-')f=-1;ch=getc();}while(ch>='0'&&ch<='9'){x=x*10+(ch-'0');ch=getc();}return x*f;
}
struct vec{int to;int fro;
};
vec mp[MAXN];
int tai[MAXN],cnt;
int n;
int fa[MAXN][20],dep[MAXN];
int dfn[MAXN],tim;
int m;
int M;
int t[MAXN];
int st[MAXN],tp;
inline void be(int x,int y){int t,j;mp[++cnt].to=y;mp[cnt].fro=tai[x];tai[x]=cnt;dep[y]=dep[x]+1;for(t=x,j=1;t;j++){fa[y][j]=t;t=fa[t][j];}
}
void dfs(int x){int i,y;dfn[x]=++tim;for(i=tai[x];i;i=mp[i].fro){y=mp[i].to;dfs(y);}
}
int lca(int x,int y){int i;if(dep[x]<dep[y]){swap(x,y);}for(i=19;i;i--){if(dep[fa[x][i]]>=dep[y]){x=fa[x][i];}}for(i=19;i;i--){if(fa[x][i]!=fa[y][i]){x=fa[x][i];y=fa[y][i];}}return x==y?x:fa[x][1];
}
bool cmp(int x,int y){return dfn[x]<dfn[y];
}
int main(){int i,x,y;n=read();dep[n+1]=1;for(i=1;i<=n;i++){x=read();int l;if(x){l=read();x--;while(x--){y=read();l=lca(y,l);}}else{l=n+1;}be(l,i);}dfs(n+1);m=read();while(m--){M=read();for(i=1;i<=M;i++){t[i]=read();}sort(t+1,t+M+1,cmp);st[tp=1]=n+1;int ans=0;for(i=1;i<=M;i++){int l=lca(t[i],st[tp]);while(dep[st[tp]]>dep[l]){if(dep[st[tp-1]]>dep[l]){ans+=dep[st[tp]]-dep[st[tp-1]];}else{ans+=dep[st[tp]]-dep[l];}tp--;}if(l!=st[tp]){st[++tp]=l;}st[++tp]=t[i];}while(tp>1){ans+=dep[st[tp]]-dep[st[tp-1]];tp--;}printf("%d\n",ans);}return 0;
}/*
7
0
1 1
1 1
1 2
2 2 3
0
2 2 6
3
2 2 3
2 3 5
2 4 5*/

BZOJ2851 极限满月相关推荐

  1. BZOJ2851: 极限满月

    题目大意:首先给你所有的A集合,第i个集合里的数全部小于i,接着开始构造B集合,第i个B集合是由{i}∪前面所有满足条件的Bk集合的交,满足条件的Bk集合指的是满足k∈Ai,然后给Q个询问,每次询问一 ...

  2. BZOJ2851 Violet 0 极限满月

    (这个题目想法太神了..我看了好多神犇的讨论才弄懂.. (鉴于我看的时候理解得很困难,我就讲详细点. 要存储下所有的元素.直接放在一个树结构或者什么里面显然是不行的.. 考虑第i个集合里的所有数字都不 ...

  3. [bzoj] 2851: 极限满月

    这道题初看时没想到过树,看了题解才知道可以建虚树. 对题目分析可以将b数组想成一颗树,第i个b数组就是点i到根节点的上路径的所有点的集合. 那么在构造树时就相当于将a数组中的所有点取lca ,再将i节 ...

  4. 潘淳(寒树Office):不务正业的公众号满月了,都写了些啥?

    三喜临门 一    喜 今天真是个好日子,"流浪太阳"又回来了,阴雨绵绵长恨无期,今天苏州终于天晴,于是心情大好!都说好心情会带来好运气,冥冥感觉要写点啥了,果不其然今天还有另外两 ...

  5. 数学——函数极限知识以及sympy库的limit

    函数极限与Sympy库 欢迎访问我的博客 这部分可以参考sympy库中的limit 在$z_0$点处计算$e(z)$函数的极限 \(\lim_{z \to z_0} e(z)\) = limit(e, ...

  6. 极限学习机的matlab程序_新程序员七宗罪,新手别踩雷

    每一次过渡到一个新的职业都需要学习曲线;在完全适应新的工作环境之前,我们都必须经历这个过程.具有较强的适应能力和对变化的灵活性的人可能会发现它是平稳和简单的;其他的人可能需要更多的时间和精力. 无论你 ...

  7. 【MATLAB】数据分析之求函数的极限(limit)

    在MATLAB中采用limit函数求某个具体函数的极限,其调用格式如下: limit(expr,x,a):当xa时,对函数expr求极限,返回值为函数极限. limit(expr):默认当x0时,对函 ...

  8. 深度学习的发展可能已达极限!

    [编者按]回首 2018 年,身处技术圈的你是否曾反思过些什么--科技与非科技企业界限的日益模糊.技术的发展现状和前景.科技发展的正向助推到负面效应,乃至个人心态上的变化.人文.生态.社会--玩技术的 ...

  9. 100万人同时抢1万张火车票,极限并发带来的思考

    欢迎关注方志朋的博客,回复"666"获面试宝典 每到节假日期间,一二线城市返乡.外出游玩的人们几乎都面临着一个问题:抢火车票!虽然现在大多数情况下都能订到票,但是放票瞬间即无票的场 ...

最新文章

  1. Exposing/Accessing JBoss JNDI Objects/Datasources From an External JVM
  2. java学习笔记2--数据类型、数组
  3. 会计记忆总结之二:会计要素和会计科目
  4. scanf最好与fflush(stdin)配合使用
  5. linux 安装反病毒软件
  6. mybatils多次查询问题
  7. AT2064-[AGC005F]Many Easy Problems【NTT】
  8. Leetcode:892. 三维形体的表面积(Java)
  9. 信号与槽是如何实现的_苹果iPhone 12信号仍弱?网友反馈打不进电话需重启解决...
  10. CV Code | 本周新出计算机视觉开源代码汇总(含自动驾驶目标检测、医学图像分割、风格迁移、语义分割、目标跟踪等)...
  11. windows下PL/SQL Developer连接Orcale
  12. 深入 JVM 字节码,解析类加载、链接、初始化、创建对象、对象初始化、程序执行的流程
  13. Unity3D教程:尽量避免使用foreach
  14. xshell登陆腾讯云服务器
  15. D - Maze(深度搜索+思维转换)
  16. 全国多年太阳辐射空间分布数据1981-2022年、气温分布数据、蒸散量数据、蒸发量数据、降雨量分布数据、日照数据、风速数据
  17. run.gps+trainer+uv+for+android,android 2.1(三星spica i5700)上的蓝牙问题配对工作但连接不起作用...
  18. 屏幕录制专家,如何上传到优酷的高清视频?
  19. 微信公众号小程序开通方法_微信小程序发布审核大概要多久
  20. 运动耳机怎么选,盘点目前适合运动的几款耳机

热门文章

  1. APS在医疗器械行业的应用
  2. 有手动挡的车了为什么还要买自动挡
  3. 大型网站架构模式(三)
  4. [春秋云镜wp]CVE-2022-28060 CVE-2022-26201 Victor CMS v1.0存在sql注入漏洞复现拿flag
  5. mysql误删数据后 快速恢复的办法
  6. xcode如何将系统语言改为中文,可修改拍照界面retake和use按钮
  7. Redis基本命令速查表
  8. 华为云CENTOS下安装MySQL及重置mysql8.0密码
  9. 机器学习实战——第八章(回归):回归——预测数值型数据
  10. 算法工程师的自我修养