【BZOJ3696】化合物

Description

首长NOI惨跪,于是去念文化课了。现在,他面对一道化学题。
    这题的来源是因为在一个奇怪的学校两个化竞党在玩一个奇怪的博弈论游戏。这个游戏很蛋疼,我相信你们也没有兴趣听。
    由于这个游戏涉及博弈论,因此化竞的同学就要求首长求一个类似SG函数的值。
    他们手中有一种非常神奇的化合物,它的分子由N个原子组成(不要在意一个原子可能和及其多个原子成键这个细节)。这个分子构成一个树结构,1号分子为根。    若两个原子i、j到它们的最近公共祖先的距离分别是Li和Lj,定义它们的Aij值为:
Aij=Li  xor Lj
题目要求对于每一个k(k∈N),求出两两A值为k的原子对个数。

Input

第一行一个整数N。
  接下来N-1行,每行一个整数p,第新亍的整数表示第i个原子的父亲为p。

Output

从K=0开始,第k+1行输出两两A值为K的原子对个数,输出到第一个不为零的数为止。

Sample Input

3
1
1

Sample Output

1
2

HINT

【数据规模与约定】
用h表示树结构分子的最大深度。
 N<=10^5,H<=500

题解:第一直觉是某种树形DP,但是想不出来,看到H很小,感觉暴力可过,发现正解真的是暴力~

对于每一层,我们用f[i]表示当前子树中深度为i的点的个数,然后我们用下一层的f'[j]和当前的f[i]来暴力更新答案ans[i^j],然后用f'[j]来更新f[i]就行了。

注意要输出到第一个为0的数,而不是输出所有不为0的数。

随手写了一发rank1了什么鬼~可能因为数组开的比较小吧?

#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
const int maxn=100010;
int n,mx,cnt;
int fa[maxn],dep[maxn],md[maxn],f[520][520],to[maxn],head[maxn],next[maxn],ans[520];
int rd()
{
int ret=0,f=1; char gc=getchar();
while(gc<'0'||gc>'9') {if(gc=='-')f=-f; gc=getchar();}
while(gc>='0'&&gc<='9') ret=ret*10+gc-'0',gc=getchar();
return ret*f;
}
void add(int a,int b)
{
to[cnt]=b,next[cnt]=head[a],head[a]=cnt++;
}
void dfs(int x)
{
md[x]=dep[x],f[dep[x]][dep[x]]=1;
int i,j,k;
for(i=head[x];i!=-1;i=next[i])
{
dep[to[i]]=dep[x]+1,dfs(to[i]);
for(j=dep[x];j<=md[x];j++)
for(k=dep[x];k<=md[to[i]];k++)
ans[(j-dep[x])^(k-dep[x])]+=f[dep[x]][j]*f[dep[x]+1][k];
for(j=dep[x];j<=md[to[i]];j++)
f[dep[x]][j]+=f[dep[x]+1][j],f[dep[x]+1][j]=0;
md[x]=max(md[x],md[to[i]]);
}
}
int main()
{
n=rd();
int i;
memset(head,-1,sizeof(head));
for(i=2;i<=n;i++) fa[i]=rd(),add(fa[i],i);
dep[1]=2,dfs(1);
for(i=0;i<512;i++)
{
if(!ans[i]) return 0;
printf("%d\n",ans[i]);
}
}

【BZOJ3696】化合物 树形DP+暴力的更多相关文章

  1. 【BZOJ-3696】化合物 树形DP + 母函数(什么鬼)

    3696: 化合物 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 165  Solved: 85[Submit][Status][Discuss] D ...

  2. 【bzoj3696】化合物 树形dp

    题目描述 首长NOI惨跪,于是去念文化课了.现在,他面对一道化学题.这题的来源是因为在一个奇怪的学校两个化竞党在玩一个奇怪的博弈论游戏.这个游戏很蛋疼,我相信你们也没有兴趣听.由于这个游戏涉及博弈论, ...

  3. C. Ilya And The Tree 树形dp 暴力

    C. Ilya And The Tree 写法还是比较容易想到,但是这么暴力的写法不是那么的敢写. 就直接枚举了每一个点上面的点的所有的情况,对于这个点不放进去特判一下,然后排序去重提高效率. 注意d ...

  4. [Bzoj3696]化合物【暴力+树形Dp】

    Online Judge:Bzoj3696 Label:暴力,树形Dp 题目描述 首长NOI惨跪,于是去念文化课了.现在,他面对一道化学题. 这题的来源是因为在一个奇怪的学校两个化竞党在玩一个奇怪的博 ...

  5. BZOJ5341[Ctsc2018]暴力写挂——边分治+虚树+树形DP

    题目链接: CSTC2018暴力写挂 题目大意:给出n个点结构不同的两棵树,边有边权(有负权边及0边),要求找到一个点对(a,b)满足dep(a)+dep(b)-dep(lca)-dep'(lca)最 ...

  6. VIJOS1476 旅行规划(树形Dp + DFS暴力乱搞)

    题意: 给出一个树,树上每一条边的边权为 1,求树上所有最长链的点集并. 细节: 可能存在多条最长链!最长链!最长链!重要的事情说三遍 分析: 方法round 1:暴力乱搞Q A Q,边权为正-> ...

  7. [JLOI2015]战争调度【暴力+树形Dp】

    Online Judge:Bzoj4007,Luogu P3262 Label:暴力,树形Dp 题解 参考了这篇blog https://www.cnblogs.com/GXZlegend/p/830 ...

  8. 树形dp专题总结

    树形dp专题总结 大力dp的练习与晋升 原题均可以在网址上找到 技巧总结 1.换根大法 2.状态定义应只考虑考虑影响的关系 3.数据结构与dp的合理结合(T11) 4.抽直径解决求最长链的许多类问题( ...

  9. 【BZOJ-4455】小星星 容斥 + 树形DP

    4455: [Zjoi2016]小星星 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 204  Solved: 137[Submit][Status] ...

随机推荐

  1. java数据结构和算法10(堆)

    这篇我们说说堆这种数据结构,其实到这里就暂时把java的数据结构告一段落,感觉说的也差不多了,各种常见的数据结构都说到了,其实还有一种数据结构是“图”,然而暂时对图没啥兴趣,等有兴趣的再说:还有排序算 ...

  2. 10.1综合强化刷题 Day5

    T1 拼不出的数 lost.in/.out/.cpp[问题描述]3 个元素的集合{5; 1; 2}的所有子集的和分别是0; 1; 2; 3; 5; 6; 7; 8.发现最小的不能由该集合子集拼出的数字 ...

  3. Java编程经验汇总

    JDK和JRE 大家肯定在安装JDK的时候会有选择是否安装单独的jre,一般都会一起安装,我也建议大家这样做.因为这样更能帮助大家弄清楚它们的区别: Jre 是java runtime environ ...

  4. 【转】java:多网卡环境下获取MAC地址

    http://blog.csdn.net/10km/article/details/78569962 JDK6以后 java.net.NetworkInterface提供了完整的方法用于获取网络设备信 ...

  5. jQuery 基础学习

    jQuery 可以按照网站进行查看 http://jquery.cuishifeng.cn/ jQuery 模块  <=>类库 DOM/BOM/JavaScript的类库 一 查找元素 j ...

  6. ZFS -世界上最高级的文件系统之一

    https://www.oschina.net/news/44302/openzfs_launch_announcement https://en.wikipedia.org/wiki/ZFS ZFS ...

  7. Idea下Maven的使用

    一.导入maven结构的web工程 (1)在Intellij IDEA中选择File->New->Project from Version Control->Subversion. ...

  8. UIScrollView/UITableView 一直显示滚动条(ScrollBar Indicators)、滚动条Width(宽度)、滚动条Color(颜色)

    在 IOS 中,对 UIScrollView 的滚动条(ScrollBar Indicators)的自定义设置接口,一直都是很少的.除了能自定义简单的样式(UIScrollViewIndicatorS ...

  9. AngularJS的稍复杂form验证

    代码下载:https://files.cnblogs.com/files/xiandedanteng/angularjsSoccerFormCheck.rar 代码: <!DOCTYPE HTM ...

  10. html5,audio音乐播放器

    最终,做了自己原来一直想要实现的事儿.得出的结果是,有些事儿一旦開始做了,那么它就并非非常难. 如今的我,正听着自己的播放器放出的<光辉岁月>写这篇周六清晨的博文.写的不是非常好.但也请各 ...