标签:技术分享 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; }
标签:技术分享 namespace long int line names none span pac
原文地址:http://www.cnblogs.com/Kong-Ruo/p/7725616.html