[题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=3697 [算法] 首先 , 将黑色的边变成1 ,白色的边变成-1 那么 , 问题就转化为了有多少条路径满足 : 1. 路径长度为0 2. 路径中间存在一个点使得这个点可以将这条路径分成两段且长度为0 考虑我们已经处理完了前面的子树 , 对于当前子树中一点x , 深度为d , 显然 , 前面的子树中要有一个深度为-d的点y ,这条路径合法当且仅当x到分治重心的路径上有一点满足d[z]…
传送门 题意: 路径有$-1,1$两种权值,求有多少路径满足权值和为$0$且有一个点将路径分成权值和为$0$的两段 第四节课本来想去上化学,然后快上课了这道题还没调出来.....可恶我想上化学 昨天两节语文课潸然的李煜讲座也没去听呜呜听说今天的语文课还有什么文艺活动又错过了呜呜 还是有思路的 点分治,考虑经过$u$的路径 首先保证权值和为$0$,记录$c[i]$为当前权值和为$i$的路径有几条 怎么满足有一个点呢? $0+0=0$!!! 我们只要保证一段和$0$另一段自然也是$0$ 所以补充保存…
点分治,设当前处理的块的重心为rt,预处理出每个子树中f[v][0/1]表示组合出.没组合出一对值v的链数(从当前儿子出发的链),能组合出一对v值就是可以有一个休息点 然后对于rt,经过rt且合法的路径是两边拼起来至少有一个休息点的路径,每次假如新儿子都和之前的儿子组合一遍即可,注意f[0][0]实际上也是有休息点的,因为组合出0就是休息点,另外加一下 #include<iostream> #include<cstdio> using namespace std; const in…
好久不做点分治的题了,正好在联赛之前抓紧复习一下. 先把边权为 $0$ 的置为 $-1$.定义几个状态:$f[dis][0/1],g[dis][0/1]$ 其中 $f$ 代表在当前遍历的子树内的答案. 其中 $f[dis][0]$ 表示到根节点距离为 $dis$,没有遇到平衡点的个数,$f[dis][1]$ 表示遇到平衡点的个数. 然后就把 $f$ 和 $g$ 用乘法原理乘一下就可以了. 注意要及时清空. #include <cstdio> #include <vector> #i…
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=3127 [题目大意] 给出一棵01边权树,求存在多少条路径,使得路径上0和1的数量相同, 并且在路劲中能找到至少一个中断点,使得分为两段01数量相同的路径 [题解] 我们对这棵树进行点分治,每次只考虑经过重心的路径, 我们将路径权值和分出现一次和出现多次进行统计,如果出现一次, 则在之前出现了多次的权值数组中查相反数,如果出现多次, 则是一次和多次的权值数组的和,权值和为0的特殊情况则…
3697: 采药人的路径 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1718  Solved: 602[Submit][Status][Discuss] Description 采药人的药田是一个树状结构,每条路径上都种植着同种药材.采药人以自己对药材独到的见解,对每种药材进行了分类.大致分为两类,一种是阴性的,一种是阳性的.采药人每天都要进行采药活动.他选择的路径是很有讲究的,他认为阴阳平衡是很重要的,所以他走的一定是两种药材数目相等的路径…
传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=3127 http://www.lydsy.com/JudgeOnline/problem.php?id=3697 [题解] 点分治. f[i,0/1]表示前面一坨路径和为i,是否存在休息站. 分类讨论:休息站在点分的地方,休息站在前面子树,休息站在当前子树 子树合并的时候顺便算一发贡献即可. # include <stdio.h> # include <string.h> #…
3697: 采药人的路径 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 681  Solved: 246[Submit][Status][Discuss] Description 采药人的药田是一个树状结构,每条路径上都种植着同种药材.采药人以自己对药材独到的见解,对每种药材进行了分类.大致分为两类,一种是阴性的,一种是阳性的.采药人每天都要进行采药活动.他选择的路径是很有讲究的,他认为阴阳平衡是很重要的,所以他走的一定是两种药材数目相等的路径.…
点分治 Orz hzwer 倒是比较好想到点分治……然而在方案统计这里,我犯了两个错误…… 1.我比较傻逼的想的是:通过儿子来更新父亲,也就是统计以x为根的子树中xxxx的路径有多少条……这样转移. 然而这实在是太傻逼了,黄学长教做人:从父亲来更新儿子,走到一个节点直接更新路径的统计数,反正我们要的是[经过root的xx路径的数量] 所以可以一遍dfs直接搞出来…… 2.统计方案的方式也想错了……我只考虑了以root作为中转站的路径,然而经过root的路径中,并不只有这种路径是合法的……中转站在…
http://www.lydsy.com/JudgeOnline/problem.php?id=3697 点分治 路径0改为路径-1 g[i][0/1] 和 f[i][0/1]分别表示当前子树 和 已经处理完的兄弟节点子树 中,路径前缀和为i,前面是否还有一个前缀和为i的点 合法的路径分为三类: 1.路径以当前分治重心为端点,ans+=g[0][1] 2.路径跨越分治重心,休息站在分治重心,ans+=g[0][0]*f[0][0] 3.路径跨越分治重心,休息站不在分治重心,ans+= Σ g[i…