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

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

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

  1. #include<iostream>
  2. #include<cstdio>
  3. using namespace std;
  4. const int N=200005;
  5. int n,h[N],cnt,tot,c[N][2],fa[N],si[N],de[N],mx[N],mn[N];
  6. bool fl,v[N];;
  7. int read()
  8. {
  9. int r=0,f=1;
  10. char p=getchar();
  11. while(p<'0'||p>'9')
  12. {
  13. if(p=='-')
  14. f=-1;
  15. p=getchar();
  16. }
  17. while(p>='0'&&p<='9')
  18. {
  19. r=r*10+p-48;
  20. p=getchar();
  21. }
  22. return r*f;
  23. }
  24. void dfs(int u)
  25. {
  26. if(u>n)
  27. {
  28. mn[u]=de[u],mx[u]=de[u];
  29. return;
  30. }
  31. for(int i=0;i<=1;i++)
  32. {
  33. de[c[u][i]]=de[u]+1;
  34. dfs(c[u][i]);
  35. si[u]+=si[c[u][i]];
  36. }
  37. mn[u]=min(mn[c[u][0]],mn[c[u][1]]);
  38. mx[u]=max(mx[c[u][0]],mx[c[u][1]]);
  39. if(mn[u]!=mx[u])
  40. v[u]=1;
  41. if(v[c[u][0]]&&v[c[u][1]])
  42. fl=1;
  43. }
  44. int wk(int u)
  45. {
  46. if(u>n)
  47. return 0;
  48. return (si[c[u][1]]>si[c[u][0]])+wk(c[u][0])+wk(c[u][1]);
  49. }
  50. int main()
  51. {
  52. n=read();
  53. tot=n;
  54. for(int i=1;i<=n;i++)
  55. {
  56. c[i][0]=read(),c[i][1]=read();
  57. if(c[i][0]==-1)
  58. c[i][0]=++tot,si[c[i][0]]=1;
  59. if(c[i][1]==-1)
  60. c[i][1]=++tot,si[c[i][1]]=1;
  61. }
  62. de[1]=1;
  63. dfs(1);//cerr<<mn<<" "<<mx<<endl;
  64. if(mx[1]-mn[1]>1||fl)
  65. {
  66. puts("-1");
  67. return 0;
  68. }
  69. printf("%d\n",wk(1));
  70. return 0;
  71. }

洛谷 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. P1546||2627 最短网络 Agri-Net 洛谷||codevs

    https://www.luogu.org/problem/show?pid=1546 同http://codevs.cn/problem/2627/ 不同算法 题目背景 农民约翰被选为他们镇的镇长! ...

  2. JAVA实现选择排序,插入排序,冒泡排序,以及两个有序数组的合并

    一直到大四才开始写自己的第一篇博客,说来实在有点羞愧.今天写了关于排序的算法题,有插入排序,冒泡排序,选择排序,以下贴上用JAVA实现的代码: public class test5 { public ...

  3. 洛谷 P2862 [USACO06JAN]把牛Corral the Cows

    P2862 [USACO06JAN]把牛Corral the Cows 题目描述 Farmer John wishes to build a corral for his cows. Being fi ...

  4. 使用datatables实现后台分页功能,减轻前端渲染压力

    注意不同版本,参数名字及参数内容存在差异,具体可以参考https://datatables.net/upgrade/1.10-convert#Options 控制页面显示的参数:https://dat ...

  5. [Angular] Refactor Angular Component State Logic into Directives

    Allow the base toggle to be a tag (<toggle>) or attribute (<div toggle>). The <toggle ...

  6. libevent HTTP client 的实现

    my_conn_ = evhttp_connection_base_new(ev_base_,ev_dns_,host,port); struct evhttp_request *http_req; ...

  7. Android网络通信之Socket

    在移动APP开发中.网络通信数据传输是必定存在的.移动APP离开了网络通信数据传输的功能方式,就好比一潭死水,永远都 是原来的样子. 提到网络通信传输数据.首先出如今程序猿脑海中的是HTTP协议传输, ...

  8. js获取get传递的值

    <script language="javascript" src="js/jquery-1.9.0.min.js"></script> ...

  9. Linux(Ubuntu14.04)下Google Chrome / Chromium标题栏乱码问题

    注:我使用的Linux发行版是Ubuntu 14.04,不同Linux发行版可能会有不同. 最近在使用Chromium的时候tab的标题栏中文显示乱码,在地址栏输入中文是同样时乱码,就像下图: 看起来 ...

  10. 项目已经部署,tomcat已经启动,网址也没问题,却出现404错误

    这个有可能是tomcat在初始化资源的时候发生了异常...判断tomcat是否发生异常就是看tomcat启动日志里有没有报错就行了. 另一种原因就是可能是修改了项目名称.因为web名称实际上是没有跟着 ...