码迷,mamicode.com
首页 > 其他好文 > 详细

cf 0-1-Tree

时间:2019-05-02 14:29:18      阅读:108      评论:0      收藏:0      [点我收藏+]

标签:通过   简单   bsp   problem   ORC   一个   force   起点   交集   

http://codeforces.com/contest/1156/problem/D

一棵树,边权只能为0或者1。一条简单路径就是类似01001100的样子。现要求简单路径中,0不能接在1后面。问其数量。

首先想到的是树形dp,哎,脑子里的工具或者类比问题太少了。

dp的机制:知道儿子树的所有答案,求当前树的答案。其实能做:增加了当前根之后,增加的路径就是通过了当前根的路径,它到儿子的路是1那么称这些儿子为1儿子,另外的是0儿子。那么0儿子间俩俩相乘再x2,1儿子间也是,然后0儿子和1儿子间彼此相乘但是不x2。可是还有以这个根为端点的呢?这个就难搞了,总之很复杂?

复杂,可是自己也不知道最终算法是这个的简化版本还是另辟蹊径对不?

换一个机制:全0路径和全1路径容易求得。现在求01路径:01路径必有一个中轴点从0到1。那么对于一个点来说,它通向的所有0点都能作为起点,它联通的所有1点都能做终点。于是有了一个有意思的问题,边有值0或者1,点没有值,怎么搞?自己纠结一会。

对一个既有0边又有1边的点,它是什么性质?反正不看答案我很难想到怎么解。

答案是0边1边分开考虑,只考虑0边,然后构建了一些连通子图,1边也是。然后0和1之间是有交集的,交集就是那些既有0边又有1边的点,但是他们已经两个世界了。

那么对于一个点来说,它所在的0边连通子图和1边连通子图之间相乘就是最终答案了!

我服!

 

cf 0-1-Tree

标签:通过   简单   bsp   problem   ORC   一个   force   起点   交集   

原文地址:https://www.cnblogs.com/waldenlake/p/10802208.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!