zoukankan      html  css  js  c++  java
  • P5018 对称二叉树

    链接:P5018

    ----------------------------------

    这道题可以写暴力

    ------------------------------

    暴力搜索,首先统计下每一个点的下属节点数,用来统计答案。

    然后直接对称搜索就行

    -------------------------------

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<algorithm>
     4 
     5 using namespace std;
     6 int son[10000001][2]//左右儿子;
     7 int size[1000001];
     8 int n;
     9 int v[1000001];
    10 int ans;
    11 void dfs(int now){
    12     size[now]=1;//统计包括自己在内的下属节点数 
    13     if(-1!=son[now][1]){
    14         dfs(son[now][1]);
    15         size[now]+=size[son[now][1]];//有儿子就加上儿子的 
    16     }
    17     if(son[now][0]!=-1){
    18         dfs(son[now][0]);
    19         size[now]+=size[son[now][0]];
    20     }
    21 }
    22 bool check(int x,int y){
    23     if(x==-1&&y==-1)//单独的一个儿子或者说都没有节点肯定对称 
    24     return 1;
    25     if(x!=-1&&y!=-1&&v[x]==v[y]&&check(son[x][1],son[y][0])&&check(son[x][0],son[y][1]))
    26     //到了这一层,如果还有-1,就一定不对称了
    27     //值要 相等
    28     //对称搜索下一层 
    29     return 1;
    30     return 0;    
    31     
    32 }
    33 
    34 int main(){
    35     scanf("%d",&n);
    36     for(int i=1;i<=n;++i){
    37         scanf("%d",&v[i]);
    38     }
    39     for(int i=1;i<=n;++i){
    40         scanf("%d%d",&son[i][0],&son[i][1]);
    41     }
    42     dfs(1); 
    43     int ans=0;
    44     for(int i=1;i<=n;++i){
    45         if(check(son[i][1],son[i][0]))//搜索儿子 
    46         {
    47             ans=max(ans,size[i]);
    48         }
    49     }
    50     cout<<ans;
    51 return 0;
    52 }
    Ac
  • 相关阅读:
    双色球随机一注
    if else的简写
    select
    预解析
    json
    数组方法
    arguments
    国密SM4算法
    AES算法
    Feistel算法结构与DES加密算法
  • 原文地址:https://www.cnblogs.com/For-Miku/p/11266169.html
Copyright © 2011-2022 走看看