bzoj3696

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了bzoj3696相关的知识,希望对你有一定的参考价值。

技术分享
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<queue>
#define ll long long
using namespace std;
int n;
const int maxn=1e5+10;
inline int read()
{
    char ch=getchar();
    int x=0,f=1;
    while(!isdigit(ch)){if(ch==-)f=-1;ch=getchar();}
    while(isdigit(ch)){x=10*x+ch-0;ch=getchar();}
    return x*f;
}
int first[2*maxn],to[2*maxn],next[2*maxn],val[2*maxn],cnt;
int a[maxn][600];
int ans[maxn];
inline void add(int u,int v,int w)
{to[++cnt]=v;next[cnt]=first[u];first[u]=cnt;val[cnt]=w;
 to[++cnt]=u;next[cnt]=first[v];first[v]=cnt;val[cnt]=w;}

void dfs(int x)
{
    a[x][0]=1;
    for(int i=first[x];i;i=next[i])
    {
        dfs(e[i].to);
        for(int j=0;j<=deep[x];j++)
            for(int k=0;k<=deep[to[i]];k++)
                ans[j^(k+1)]+=a[x][j]*a[to[i]][k];
        
        deep[x]=max(deep[x],deep[to[i]]+1);
        for(int j=0;j=<deep[e[i].to];j++)
            a[x][j+1]+=a[e[i].to][j];
    }
}
int main()
{
    scanf("%d",&n);
    for(int i=1;i<n;i++)add(i,read());
    dfs(1);
    int k=512;
    while(!ans[k])k--;
    for(int i=0;i<=k;i++)cout<<ans[k]<<endl;
}
View Code

 

以上是关于bzoj3696的主要内容,如果未能解决你的问题,请参考以下文章

BZOJ 3696 化合物

BZOJ3696化合物 树形DP+暴力

[bzoj3696]化合物_树形dp

bzoj3696化合物 树形dp

poj 3696 The Luckiest number 欧拉函数在解a^x=1modm的应用

使用 RFC3696 的 EmailValidation(电子邮件地址)