思路
可以考虑利用树上前缀的和思想来处理。实际上就是利用根节点记录反向反信息。
我们首先处理出根节点到所有点的反转次数,然后再用一个 d f s dfs dfs处理出每个节点的信息。注意第二个 d f s dfs dfs,第二个dfs 根节点往下走的时候是逆过程,根节点->当前节点的顺向边都是负贡献,反转次数+1,反之亦反。
邻接表&&链式前向星均可,输入输出都没卡,可以说非常善良了。
AC Code#include
const int N = 1e6 + 10;
struct node{ int v, w; };
std::vector g[N];
int book[N];
inline void solve(){
int n = 0; std::cin >> n;
for (int i = 1, u, v; i > u >> v;
g[u].emplace_back(node{v, 1});
g[v].emplace_back(node{u, 0});
}
std::function dfs1 = [&](int u, int fa) {
for (node v : g[u]) {
int nv = v.v, nw = v.w;
if(nv == fa) continue;
book[1] += (1 - nw);
dfs1(nv, u);
}
};
dfs1(1, 0);
std::function dfs2 = [&](int u, int fa){
for (node v : g[u]) {
int nv = v.v, nw = v.w;
if(nv == fa) continue;
book[nv] = book[u] + (nw == 1 ? 1 : -1);
dfs2(nv, u);
}
};
dfs2(1, 0);
int ans = 1e9 + 7;
for(int i = 1; i
关注
打赏
热门博文
- 回坑记之或许是退役赛季?
- [LCT刷题] P1501 [国家集训队]Tree II
- [LCT刷题] P2147 洞穴勘测
- 2022-2023 ICPC Brazil Subregional Programming Contest VP记录
- [线段树套单调栈] 2019-2020 ICPC Asia Hong Kong Regional Contest H.[Hold the Line]
- The 2021 ICPC Asia Nanjing Regional Contest E.Paimon Segment Tree 区间合并线段树/维护矩阵乘法
- CF580E - Kefa and Watch 线段树维护哈希
- HDU5869 Different GCD Subarray Query 离线查询/区间贡献
- 27.CF1004F Sonya and Bitwise OR 区间合并线段树
- 26.CF1000F One Occurrence