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

    一年后回首此题,此乃暴力也。

    遇到T4想暴力,这个基本的框架应该熟练掌握,这就是一个基本的学习经验了,要形成这个直觉思维,这个基本的意识大家再熟悉一下,没AK NOIP就不应该了,对吧,诶。

    #include<bits/stdc++.h>
    using namespace std;
    int w[1000005];
    int a[1000005][2];
    int s[1000005];
    void dfs(int x)//求出以编号x的节点为根的树的节点数量
    {
    	s[x]=1;//根
    	if(a[x][0]!=-1) dfs(a[x][0]),s[x]+=s[a[x][0]];//左子树
    	if(a[x][1]!=-1) dfs(a[x][1]),s[x]+=s[a[x][1]];//右子树
    }
    bool dfs1(int x,int y)
    {
    	if(x==-1&&y==-1) return 1;//无左右子树,即叶节点,对称
    	if(x!=-1&&y!=-1&&s[x]==s[y]&&w[x]==w[y])//左右相应位置比较
    	{
    		if(dfs1(a[x][0],a[y][1])&&dfs1(a[x][1],a[y][0])) return 1;//左左-右右,左右-右左
    	}
    	return 0;
    }
    int main()
    {
    	int n;
    	scanf("%d",&n);
    	for(int i=1;i<=n;i++) scanf("%d",&w[i]);//输入每个节点的权值
    	for(int i=1;i<=n;i++) scanf("%d%d",&a[i][0],&a[i][1]);//输入左右孩子
    	dfs(1);
    	int ans=0;
    	for(int i=1;i<=n;i++)
    	{
    		if(dfs1(a[i][0],a[i][1])) ans=max(ans,s[i]);//求出所有对称二叉树中节点最多的
    	}
    	printf("%d",ans);
    	return 0;
    } 
    

      关于NOIP,它寿终正寝了。一路顺风!

  • 相关阅读:
    POJ 1251 Jungle Roads
    1111 Online Map (30 分)
    1122 Hamiltonian Cycle (25 分)
    POJ 2560 Freckles
    1087 All Roads Lead to Rome (30 分)
    1072 Gas Station (30 分)
    1018 Public Bike Management (30 分)
    1030 Travel Plan (30 分)
    22. bootstrap组件#巨幕和旋转图标
    3. Spring配置文件
  • 原文地址:https://www.cnblogs.com/dong-ji-yuan/p/11843515.html
Copyright © 2011-2022 走看看