SRM 559 Div1 500 HatRack

来源:互联网 发布:瓷秀软件多少钱 编辑:程序博客网 时间:2024/05/22 06:34
/*    计算出每个节点对应子树的方法相乘即可 */ #include<bits/stdc++.h>using namespace std;typedef long long ll;#define M 55int n,ch[M][M];vector<int>G[M];ll dfs(int x,int f=0,int p=1){    ch[x][0]=0;    for(int i=0;i<G[x].size();i++)if(G[x][i]!=f)        ch[x][++ch[x][0]]=G[x][i];    if(ch[x][0]==0&&p*2>n)return 1;    if(ch[x][0]==1&&p*2==n)return dfs(ch[x][1],x,p<<1);    if(ch[x][0]==2){        int l1=dfs(ch[x][1],x,p<<1);        int r2=dfs(ch[x][2],x,p<<1|1);        int l2=dfs(ch[x][2],x,p<<1);        int r1=dfs(ch[x][1],x,p<<1|1);        return 1ll*l1*r2+l2*r1;    }return 0;}int main(){    scanf("%d",&n);    for(int i=1,x,y;i<n;i++){        scanf("%d%d",&x,&y);        G[x].push_back(y);G[y].push_back(x);    }ll ans=0;    for(int i=1;i<=n;i++)ans+=dfs(i);    cout<<ans<<'\n';}
1 0
原创粉丝点击