题意:
一棵树上有些边是1有些是0 问 有几条简单路径路过奇数个1 树上的边的1和0可以修改
思路:
不会做… 看题解才找到思路… TAT
首先要明确一点 对于u->v这条路径 它的奇偶是可以通过root->u和root->v计算的 因为如果从root出发的两路径不相交 那么两路径上的1相加即可判断u->v 如果相交 假设相交部分有x个1 那么对于u->v的1的个数即为两路径相加 再减去2x 很明显减2x不影响奇偶性 因此本题可以得出结论 如果从root出发有y个奇数路径 则答案为 y*((n-1)-y+1) = y*(n-y) 式子中用(n-1)是因为不算root 后面+1是因为奇数路径可以直接当答案不与偶数路径拼接
知道了如何求答案 再来想如何维护边修改 我们发现 修改一条边fu->fv 只影响fv子树中的奇偶性 那么可以用dfs序表示出树的线性结构 再通过线段树区间更新来达到目的
代码:
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include