码迷,mamicode.com
首页 > 其他好文 > 详细

bzoj3696

时间:2017-10-24 22:50:06      阅读:181      评论:0      收藏:0      [点我收藏+]

标签:技术分享   namespace   long   int   line   names   none   span   pac   

技术分享
#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

标签:技术分享   namespace   long   int   line   names   none   span   pac   

原文地址:http://www.cnblogs.com/Kong-Ruo/p/7725616.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!