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; }
以上是关于bzoj3696的主要内容,如果未能解决你的问题,请参考以下文章