bzoj4928: 第二题
Description
Input
Output
#include<cstdio>
#include<cstring>
#define Fe(i,l,r) for(int i=l;i<=r;++i)
typedef unsigned long long u64;
const int N=,P=;
void maxs(int&a,int b){if(a<b)a=b;}
u64 H(u64 x){return (x^x>>^x<<)+;}
char buf[],*ptr=buf+;
int G(){
if(ptr-buf==)fread(ptr=buf,,,stdin);
return *ptr++;
}
int _(){
int x=;
if(ptr-buf<){
while(*ptr<)++ptr;
while(*ptr>)x=x*+*ptr++-;
}else{
int c=G();
while(c<)c=G();
while(c>)x=x*+c-,c=G();
}
return x;
}
int n,ans=;
int mem[N],*mp=mem,*e[N],ep[N],fa[][N],fas[N],id[N],_fa[N],_son[N];
int q[N],ql=,qr=,dep[N],md[N];
u64 h[][N],h2[N],_h[N];
u64 hx[P];
int ht[P],tk=;
bool ins(u64 x){
int w=(unsigned(x)^unsigned(x>>))%P;
while(ht[w]==tk){
if(hx[w]==x)return ;
if((w+=)>=P)w-=P;
}
hx[w]=x;ht[w]=tk;
return ;
}
template<class T>
void cpy(T*a,T*b){memcpy(a+,b+,sizeof(T)*n);}
void getson(){
memset(_son+,,sizeof(int)*n);
Fe(t,,qr){
int w=q[t],f=fas[w];
if(!_son[f])_son[f]=t;
}
}
void cal(int _i){
cpy(_h,h[_i]);
cpy(_fa,fa[_i]);
for(int i=_i-;i>=;--i){
++tk;
cpy(h2,_h);
getson();
Fe(t,,qr){
int w=q[t],f=_fa[w];
if(f)h2[f]=h2[f]*+h[i][w]+(id[fa[][w]]-_son[f]);
}
bool is=;
int mn=ans+(<<i);
Fe(w,,n)if(md[w]+>=mn&&ins(h2[w])){
is=;
break;
}
if(is){
ans=mn;
Fe(w,,n){
_h[w]=H(h2[w]);
_fa[w]=fa[i][_fa[w]];
fas[w]=fa[i][fas[w]];
}
}
}
}
void cal(){
Fe(w,,n)h[][w]=;
for(int i=;i<;++i){
++tk;
cpy(h2,h[i]);
getson();
Fe(t,,qr){
int w=q[t],f=fa[i][w];
if(f)h2[f]=h2[f]*+h[i][w]+(id[fa[][w]]-_son[f]);
}
bool is=;
int mn=ans+(<<i);
Fe(w,,n)if(md[w]+>=mn&&ins(h2[w])){
is=;
break;
}
if(is){
ans=mn;
Fe(w,,n){
h[i+][w]=H(h2[w]);
fa[i+][w]=fa[i][fa[i][w]];
fas[w]=fa[i][fas[w]];
}
}else return cal(i);
}
}
int main(){
n=_();
for(int i=;i<=n;++i){
fas[i]=i;
e[i]=mp;
mp+=ep[i]=_();
for(int j=;j<ep[i];++j)fa[][e[i][j]=_()]=i;
}
for(q[++qr]=;fa[][q[]];++q[]);
while(ql!=qr){
int w=q[++ql];
id[w]=ql;
for(int*l=e[w],*r=l+ep[w];l!=r;++l)dep[q[++qr]=*l]=dep[w]+;
}
for(int i=qr;i;--i){
int w=q[i];
maxs(md[fa[][w]],md[w]+);
}
cal();
printf("%d\n",ans-);
return ;
}
bzoj4928: 第二题的更多相关文章
- 【BZOJ4928】第二题 树hash+倍增
[BZOJ4928]第二题 Description 对于一棵有根树,定义一个点u的k-子树为u的子树中距离u不超过k的部分. 注意,假如u的子树中不存在距离u为k的点,则u的k-子树是不存在的. 定义 ...
- 05:统计单词数【NOIP2011复赛普及组第二题】
05:统计单词数 总时间限制: 1000ms 内存限制: 65536kB 描述 一般的文本编辑器都有查找单词的功能,该功能可以快速定位特定单词在文章中的位置,有的还能统计出特定单词在文章中出现的次 ...
- 常见面试第二题之什么是Context
今天的面试题,也就是我们常见面试题系列的第二题,我们来讲一讲android中的context.我相信大家android开发者一定对于这个context非常熟悉,肯定都有使用过,肯定没有没使用过的.但是 ...
- 《学习OpenCV》练习题第五章第二题abc
代码: #include <stdio.h> #include <opencv/highgui.h> #include <opencv/cv.h> #include ...
- 《学习OpenCV》练习题第四章第二题
#include <highgui.h> #include <cv.h> #pragma comment (lib,"opencv_calib3d231d.lib&q ...
- CSDN挑战编程——《金色十月线上编程比赛第二题:解密》
金色十月线上编程比赛第二题:解密 题目详情: 小强是一名学生, 同一时候他也是一个黑客. 考试结束后不久.他吃惊的发现自己的高等数学科目竟然挂了,于是他果断入侵了学校教务部站点. 在入侵的过程中.他发 ...
- NOIP2005-普及组复赛-第二题-校门外的树
题目描述 Description 某校大门外长度为L的马路上有一排树,每两棵相邻的树之间的间隔都是1米.我们可以把马路看成一个数轴,马路的一端在数轴0的位置,另一端在L的位置:数轴上的每个整数点,即0 ...
- 【gdoi2018 day2】第二题 滑稽子图(subgraph)(性质DP+多项式)
题目大意 [gdoi2018 day2]第二题 滑稽子图(subgraph) 给你一颗树\(T\),以及一个常数\(K\),对于\(T\)的点集\(V\)的子集\(S\). 定义\(f(S)\)为点集 ...
- 【LOJ#6066】「2017 山东一轮集训 Day3」第二题(哈希,二分)
[LOJ#6066]「2017 山东一轮集训 Day3」第二题(哈希,二分) 题面 LOJ 题解 要哈希是很显然的,那么就考虑哈希什么... 要找一个东西可以表示一棵树,所以我们找到了括号序列. 那么 ...
随机推荐
- 51nod1210
题解: 二维树状数组,再矩阵推一下 代码: #include<bits/stdc++.h> using namespace std; typedef long long LL; ; int ...
- 形成一个zigzag数组(JPEG编码里取像素数据的排列顺序)
面试例题:输入n,求一个nXn矩阵,规定矩阵沿45度递增,形成一个zigzag数组(JPEG编码里取像素数据的排列顺序),请问如何用C++实现? (中国台湾著名硬件公司2007年11月面试题)(自程序 ...
- Ant里面神奇的fork
最近两天一直在处理ant运行java程序的一个问题,用IDE直接运行类里面的main函数一切正常,但用ant跑该函数就报错误,错误的原因是运行ant任务时调用的是AntClasloader,而IDE里 ...
- 去掉“Windows文件保护”
1.在“开始→运行”对话框中键入“gpedit.msc”,打开“本地计算机策略→计算机配置→管理模板→系统”窗口,找到“Windows文件保护”组,在右侧窗格中双击“设置Windows文件保护扫描”项 ...
- DiskGenius注册算法简析
初次接触DiskGenius已经成为遥远的记忆,那个时候还只有DOS版本.后来到Windows版,用它来处理过几个找回丢失分区的案例,方便实用.到现在它的功能越来越强大,成为喜好启动技术和桌面支持人员 ...
- Wii Party U 游戏简介
- 2018-2019-2 网络对抗技术 20165202 Exp3 免杀原理与实践
博客目录 一.基础问题回答 二.实践内容 1.使用msf编码器msfvenom生成后门程序 2.使用msf编码器msfvenom生成jar文件 3.使用veil-evasion生成后门程序及检测 4. ...
- php 无限极分类问题
- hadoop之HDFS运行小观察
hadoop 是当前很火的一个 大数据运行框架和平台, 对于这个神奇的大家伙我甚是搞不清楚,前段时间闲来无视便把 HADOOP 运行起来, 看着它的操作记录存储部分(操作日志), IMAGE 记录着 ...
- java.lang.IndexOutOfBoundsException: setSpan (35 ... 35) ends beyond length 28
/************************************************************************************* * java.lang.I ...