没有算法,但是要注意细节。

首先无解的情况,显然的是最小深度的叶子节点和最大深度的叶子节点的深度差大于1;还有一种比较难想,就是如果一个点的左右子树都有最大和最小深度的叶子节点,这样交换左右子树也不行。

答案比较容易,就是统计一下右子树size>左子树size的节点个数即可。

#include<iostream>
#include<cstdio>
using namespace std;
const int N=200005;
int n,h[N],cnt,tot,c[N][2],fa[N],si[N],de[N],mx[N],mn[N];
bool fl,v[N];;
int read()
{
int r=0,f=1;
char p=getchar();
while(p<'0'||p>'9')
{
if(p=='-')
f=-1;
p=getchar();
}
while(p>='0'&&p<='9')
{
r=r*10+p-48;
p=getchar();
}
return r*f;
}
void dfs(int u)
{
if(u>n)
{
mn[u]=de[u],mx[u]=de[u];
return;
}
for(int i=0;i<=1;i++)
{
de[c[u][i]]=de[u]+1;
dfs(c[u][i]);
si[u]+=si[c[u][i]];
}
mn[u]=min(mn[c[u][0]],mn[c[u][1]]);
mx[u]=max(mx[c[u][0]],mx[c[u][1]]);
if(mn[u]!=mx[u])
v[u]=1;
if(v[c[u][0]]&&v[c[u][1]])
fl=1;
}
int wk(int u)
{
if(u>n)
return 0;
return (si[c[u][1]]>si[c[u][0]])+wk(c[u][0])+wk(c[u][1]);
}
int main()
{
n=read();
tot=n;
for(int i=1;i<=n;i++)
{
c[i][0]=read(),c[i][1]=read();
if(c[i][0]==-1)
c[i][0]=++tot,si[c[i][0]]=1;
if(c[i][1]==-1)
c[i][1]=++tot,si[c[i][1]]=1;
}
de[1]=1;
dfs(1);//cerr<<mn<<" "<<mx<<endl;
if(mx[1]-mn[1]>1||fl)
{
puts("-1");
return 0;
}
printf("%d\n",wk(1));
return 0;
}

洛谷 P3621 [APIO2007]风铃【贪心】的更多相关文章

  1. [洛谷P3621] [APIO2007] 风铃

    Description 你准备给弟弟 Ike 买一件礼物,但是,Ike 挑选礼物的方式很特别:他只喜欢那些能被他排成有序形状的东西. 你准备给 Ike 买一个风铃.风铃是一种多层的装饰品,一般挂在天花 ...

  2. [APIO2007]风铃 --- 贪心

    [APIO2007]风铃 题目描述 你准备给弟弟 Ike 买一件礼物,但是,Ike 挑选礼物的方式很特别:他只喜欢那些能被他排成有序形状的东西. 你准备给 Ike 买一个风铃.风铃是一种多层的装饰品, ...

  3. 洛谷P3621风铃

    传送门啦 分析: 这个题看起来像是个树形dp,嗯,就是看起来像. 所以我们就按树形dp的思路去分析就好了,这个题是一个树形dp的变形题. 和以前建树是一样的,我们用邻接表来进行储存.利用邻接表的特性, ...

  4. 洛谷P4064 [JXOI2017]加法(贪心 差分)

    题意 题目链接 Sol 这题就是一个很显然的贪心... 首先二分一个答案,然后check是否可行.check的时候我们需要对每个位置\(i\),维护出所有左端点在\(i\)左侧,右端点在\(i\)右侧 ...

  5. 洛谷P4064 加法 [JXOI2017] 贪心

    正解:贪心 解题报告: 传送门! 首先最小值最大显然考虑二分?然后就二分一个值mid,从左往右考虑,对于小于等于mid的点显然可以求出这个点至少要加几次,然后找到覆盖这个点的右端点max的区间区间加上 ...

  6. 洛谷P1966 火柴排队 贪心+离散化+逆序对(待补充QAQ

    正解: 贪心+离散化+逆序对 解题报告: 链接在这儿呢quq 这题其实主要难在想方法吧我觉得?学长提点了下说用贪心之后就大概明白了,感觉没有很难 但是离散化这里还是挺有趣的,因为并不是能很熟练地掌握离 ...

  7. [洛谷P1417 烹调方案]贪心+dp

    http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3211Dream City Time Limit: 1 Second     ...

  8. 洛谷P3826 蔬菜 [NOI2017] 贪心

    正解:贪心 解题报告: umm,,,其实我还不会 废话我这么菜怎么可能懂QAQ 先占坑,想学习这题很久了呢QAQ

  9. 【洛谷】【堆+贪心】P1484 种树

    [题目描述:] cyrcyr今天在种树,他在一条直线上挖了n个坑.这n个坑都可以种树,但为了保证每一棵树都有充足的养料,cyrcyr不会在相邻的两个坑中种树.而且由于cyrcyr的树种不够,他至多会种 ...

随机推荐

  1. solr相关文章

    Solr集群架构概述及delta-import详细配置 背景 由于项目原因,重新熟悉了下Solr,版本为3.6,搭建了主从Solr服务,并使用DIH从RDBMS数据源增量更新索引. 其实也没什么技术含 ...

  2. poj——1274 The Perfect Stall

    poj——1274   The Perfect Stall Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 25709   A ...

  3. 2017icpc乌鲁木齐网络赛Colored Graph (构造)

    题目 https://nanti.jisuanke.com/t/16958 题意 给定一个n(n<=500)个点的无向图,给每条边黑白染色,输出同色三角形最少的个数和对应的方案 分析 首先考虑给 ...

  4. linux显示系统时间

    date   查看系统时间 设置系统时间 # date --set “09/17/10 11:50" (月/日/年时:分:秒) # clock –systohc  将系统时间写入硬件时间

  5. There is no PasswordEncoder mapped for the id "null"

    There is no PasswordEncoder mapped for the id "null" 学习了:https://blog.csdn.net/dream_an/ar ...

  6. Centos 5.11 samba

    1.使用yum安装samba,添加samba user yum install samba samba-client samba-swatuseradd smbuser -m             ...

  7. java.lang.ClassNotFoundException: org.apache.commons.lang.exception.NestableRuntimeException

    java.lang.ClassNotFoundException: org.apache.commons.lang.exception.NestableRuntimeException 遇到这样的问题 ...

  8. Java基础面试:集合、内部类、线程

    package test; import java.util.Hashtable; import java.util.Map; public class test { public static St ...

  9. 关于axis2.1.6与websphere7的包冲突问题的解决方式

    1,复制axis2.1.6内的module目录内的全部文件到lib 并改动扩展名为.jar 2,删除module目录(可选,不删除也能够) 3,部署到was 4,设置was相应应用程序的类载入方案为父 ...

  10. Android AR场景拍照技术实现(有关键源代码)

    ARVR技术交流群:129340649 欢迎增加. AR场景往往给别人留下的印象深刻,假设模型做的炫丽一点,效果将会更好. 那么怎样保存这一美好的情景呢?这篇文章将教你怎样实现AR场景的拍摄以及永久保 ...