题意

一棵二叉树,定义从根节点出发到每个叶子节点\(i\)可以走出一个字符串\(S_i\),向左为字符'L',向右为字符'R',依次填下来。每个叶子节点上有个权值\(v_i\),权值之间两两不同。现在你可以选择某个节点交换它的左右子树,要求进行最少次数的操作使得对于叶子节点\(a\)和\(b\),\(S_a<S_b\)当且仅当\(v_a<v_b\),这里字符串比较利用字典序。

多组数据,\(1\leq \sum N\leq10^6\)。

分析

考虑这里要做的操作其实就是要把叶子节点排序,我们不难发现这个走出来的字符串对应于字典序实际上相当于叶子节点的顺序,例如排完序后某个节点左子树的\(v_i\)都要小于右子树的。我们观察到,我们需要的实际上只是整块整块子树对应节点之间的一个相对的顺序,也就是说某个节点处需不需要交换和其两个子树内部有没有进行什么交换是没有关系的(和其的祖先更没有关系),我们只需要判定一下这两棵子树内部相当于“一段值”之间能不能通过交换顺序实现有序就可以了,这里记录下子树里面叶子节点\(v_i\)的最大最小值,然后进行简单判定即可。

时间复杂度显然为\(\text O(N)\),即一次对树遍历的操作。

这里需要注意的是一种考虑局部贡献的思想,对于一些有特殊性质的题目,可以发现完全可以将对全体的决策拆成很多局部做,而且还可以很轻易地叠加。

转载于:https://www.cnblogs.com/wendavid/p/9314604.html

[AGC007 E]Shik and Travel相关推荐

  1. AtCoder AGC007E Shik and Travel (二分、DP、启发式合并)

    题目链接 https://atcoder.jp/contests/agc007/tasks/agc007_e 题解 首先有个很朴素的想法是,二分答案\(mid\)后使用可行性DP, 设\(dp[u][ ...

  2. AGC007 A - Shik and Stone(模拟)

    题意: 解法: 令(x,y)=(1,1),即当前位置. 然后模拟行走,如果(x,y+1)='#',那么将(x,y)修改为(x,y+1), 否则如果(x+1,y)='#',那么将(x,y)修改为(x+1 ...

  3. ASP.NET MVC 2示例Tailspin Travel

    Tailspin Travel 是一个旅游预订的应用程序示例,最新版本采用ASP.NET MVC 2技术构建,主要使用 DataAnnotations 验证, 客户端验证和ViewModels,还展示 ...

  4. 2018HDU多校训练-3-Problem G. Interstellar Travel

    链接:http://acm.hdu.edu.cn/showproblem.php?pid=6325                                  Interstellar Trav ...

  5. 四川第七届 I Travel(bfs)

    Travel The country frog lives in has nn towns which are conveniently numbered by 1,2,-,n1,2,-,n. Amo ...

  6. “人在旅途”之随想以及旅游指南(travel.msra.cn)简介

    首先让我们来回味马克.吐温说过的一句话: 旅行可以破除偏见.顽固以及狭隘的思想 稍微细想一下,这句话还是很有些道理的.很多时候,我们回头看看走过的路,难道不总是会有一种"人在旅途" ...

  7. Gym 100342I Travel Agency (Tarjan)

    题意读懂了就好做了,就是求一下点双连通分量.维护一下一颗子树的结点数,对于一个结点当u是割点的时候, 统计一下u分割的连通分量v,每得到一个连通分量的结点数cnt(v)和之前连通分量结点数sum相乘一 ...

  8. Jzoj3625 旅行(travel)

    非常好的树剖模板题了,直接C颗线段树上去就好了,动态开点一次写对~ #pragma GCC opitmize("O3") #pragma G++ opitmize("O3 ...

  9. UVA 617 - Nonstop Travel(数论+暴力枚举)

    题目链接:617 - Nonstop Travel 题意:给定一些红绿灯.如今速度能在30-60km/h之内,求多少个速度满足一路不遇到红灯. 思路:暴力每个速度,去推断可不能够,最后注意下输出格式就 ...

最新文章

  1. nuget打包文件丢失如何使用powershell脚本解决
  2. Abp mysql guid_.NET生成多数据库有序Guid
  3. linux makefile 宏定义
  4. 火车头下载文件并发布到木翼下载系统
  5. 为什么其他计算机连接需要密码是什么东西,连接其他电脑需要密码怎么处理
  6. java的在线帮助文档
  7. Java 9 : 从零开始实现模块化(一)
  8. Android 深色模式适配
  9. 电子计算机第一台视频,1946年2月14日世界上第一台计算机诞生
  10. MySql自动同步主库数据(Canal)
  11. [zz] 导致你创业失败的18个错误 [2007-05-03]
  12. 基于模型的软件开发方法综述
  13. ACTF2022 rsa leak
  14. [IOS/Swift]'Project Name' was compiled with optimization
  15. hub_probe()
  16. 纯CSS3实现旋转风车
  17. <![CDATA[ ]]>用法
  18. C++primer 第五版 练习题【3.32】 P104页 个人解答
  19. upper_bound和lower_bound用法(史上最全)
  20. 4.24 使用计算命令制作图像合成艺术效果 [原创Ps教程]

热门文章

  1. 饿了么订单--快到碗里来
  2. Adobe Flash地图控件AnyMap
  3. CISA已遭利用漏洞列表新增15个漏洞
  4. 一个问题引发的连环血案
  5. activeMQ 问题
  6. spark 学习总结
  7. Redis实战(七)
  8. WaterfallTree(瀑布树) 详细技术分析系列
  9. Android----Google code android开源项目(二)
  10. 持续集成:什么应该自动化?