Description

Input

Output

输出仅包含一个整数。表示最少需要多少次交换能使风铃满足Ike的条件。如果不可能满足,输出-1。

Sample Input

6
2 3
-1 4
5 6
-1 -1
-1 -1
-1 -1

Sample Output

2

题解

首先,算出每个结点的maxdep和mindep,即这个子树里叶结点的最大、最小深度。

如果maxdep[1]-mindep[1]>1,无解。

看某个结点,如果它的叶结点深度统一,直接忽略;如果它的两个子结点的子树里深度都不是统一的,无解;否则,如果maxdep[l]<=mindep[r],就要交换。反之则不交换。

代码:

#include <algorithm>
#include <cstdio>
const int N = 100050;
int s[N][2], mindep[N], maxdep[N];
int main() {
int n;
scanf("%d", &n);
for (int i = 1; i <= n; ++i) {
scanf("%d%d", &s[i][0], &s[i][1]);
s[i][0] = std::max(s[i][0], 0);
s[i][1] = std::max(s[i][1], 0);
}
for (int i = n; i; --i) {
int l = s[i][0], r = s[i][1];
mindep[i] = std::min(mindep[l], mindep[r]) + 1;
maxdep[i] = std::max(maxdep[l], maxdep[r]) + 1;
}
if (maxdep[1] - mindep[1] > 1) return puts("-1") & 0;
int ans = 0;
for (int o = n; o; --o) {
if (mindep[o] == maxdep[o]) continue;
int l = s[o][0], r = s[o][1];
if (maxdep[l] <= mindep[r])
++ans;
if (mindep[r] != maxdep[r] && mindep[l] != maxdep[l])
return puts("-1") & 0;
}
return printf("%d\n", ans) & 0;
}

  

BZOJ1149 [CTSC2007]风玲的更多相关文章

  1. BZOJ1149[CTSC2007]风玲Mobiles

    Description Input Output 输出仅包含一个整数.表示最少需要多少次交换能使风铃满足Ike的条件.如果不可能满足,输出-1. Sample Input 6 2 3 -1 4 5 6 ...

  2. 【bzoj1149】 [CTSC2007]风玲Mobiles

    题目意为:给一颗二叉树,每一次操作可以交换该子树的左右两颗子树,要将该树变为完全二叉树,求最小操作次数.从根开始进行一遍DFS.记录每棵子树的大小size,如果左子树的size小于右子树的size那么 ...

  3. bzoj AC倒序

    Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...

  4. “风投云涌”:那些被资本看中的IT企业的风光与辛酸

         进入七月份以来,纷享销客获得D轮融资1亿美元,撼动业界,资本与IT联姻令一部分创业者眼红的同时,没有人注意到背后的风险. 科技与资本的结合,是当今经济社会前行的宏大主题.相关统计显示,软件行 ...

  5. arcgis制作风或水流速流向图

    制作风或水流速流向图 风速风向图或流速流向图相信大家都已经见过不少,但不知道有多少人会制作这样炫的专题图,下面这边文章向我们展示了当基本数据U和V矢量被存储时,怎样计算风或水流的速度和方向和对其进行符 ...

  6. x01.Game.CubeRun: 风一样的女子

    1.题解 小孩学英语比较有意思,Monkey three => 猴三,风一样的女子 => 风 Girl.诸如此类不是重点,重点是一花一世界,一草一天堂.花花草草,纷纷扰扰.大千世界,当别具 ...

  7. 【风马一族_php】NO1_用php发出一声 Hi

    原文来自:http://www.cnblogs.com/sows/p/5990157.html  (博客园的)风马一族 侵犯版本,后果自负 第一步 安装WEB服务器 http://www.cnblog ...

  8. 【风马一族_php】NO0_搭建web服务器

    原文来自:http://www.cnblogs.com/sows/p/5977996.html  (博客园的)风马一族 侵犯版本,后果自负 安装apache apache是一种B/S结构的软件,apa ...

  9. 【风马一族_Android】通过菜单的点击,跳转到不同界面

    ---恢复内容开始--- 布局的代码:activity_main.xml <?xml version="1.0" encoding="utf-8"?> ...

随机推荐

  1. Maven 依赖管理问题小计

    刚学Maven,遇到点小问题,记录一下.https://maven.apache.org/ 问题的起因是项目中使用了 Hibernate Validator ,但是运行起来后总是不能按照设置的注解校验 ...

  2. 4、Caffe其它常用层及参数

    借鉴自:http://www.cnblogs.com/denny402/p/5072746.html 本文讲解一些其它的常用层,包括:softmax_loss层,Inner Product层,accu ...

  3. github上关于campbell数据采集的一些代码。

    数据自动采集: https://github.com/USGS-OWI/deployer-campbell   program that reads loggernet files and refor ...

  4. [HNOI2019]多边形

    Luogu5288 注意:n边形里共有n-3条边 最优步数=不与n相连的边数,关键是方案数. 按照处理顺序可以转化为树形结构即二叉树森林,转移方案数用组合数即可 关键是快速处理修改. 1.最优解减少一 ...

  5. [转] 两个静态html页面传值方法的总结

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/csdn_ds/article/details/78393564 问题 因最近尝试实现客户端与服务端分 ...

  6. java的SSH的baseDao,巧用泛型

    BaseDao接口: import java.util.List; public interface BaseDao<T,PK> { public void add(T t); publi ...

  7. 解决UnicodeDecodeError: 'ascii' code can't decode byte 0xef in position

    今天在使用python的pip安装的时候出现了这个错误 UnicodeDecodeError: 'ascii' code can't decode byte 0xef in position 7: o ...

  8. guava学习:guava集合类型-Bimap

    学习guava让我惊喜的第二个接口就是:Bimap BiMap是一种特殊的映射其保持映射,同时确保没有重复的值是存在于该映射和一个值可以安全地用于获取键背面的倒数映射. 最近开发过程中,经常会有这种根 ...

  9. 安装Ubunutu音频视频库

    sudo apt-get install ubuntu-restricted-extras

  10. C 扩展库 - sqlite3 API CRUD

    CRUD struct student typedef struct STUDENT { unsigned int id; unsigned char name[16]; unsigned int a ...