Problem Analysis
题目描述:对于给定的一棵树,判断能否通过删除 1 1 1~ k − 1 k-1 k−1条边,使删边后的森林中的每个连通块的异或和相等。
思路:思路比较巧妙:对于异或操作,我们容易知道对于任意整数 n n n:
- n x o r n = 0 n\ xor\ n = 0 n xor n=0 ;
- 0 x o r n = n 0\ xor\ n = n 0 xor n=n;
- 1 , 2 → n x o r n x o r n = n 1,2 \rightarrow n\ xor\ n\ xor\ n= n 1,2→n xor n xor n=n。
那么对于整棵树而言,如果异或和为
0
0
0,那么必然可以通过删去一条边得到两个异或值相等的连通块,此时直接输出yes
。
如果异或值不为 0 0 0,设为 n n n,那么至少有 3 3 3个以上的连通块异或值为 n n n,才有机会得到预期答案。但要注意,如果 k ≤ 2 k\leq2 k≤2,那么无法分割连通块。
Accepted Code
#include
#define pb push_back
#define int long long
using namespace std;
inline int read(){
int f = 1, x = 0; char s = getchar();
while(s '9'){ if(s =='-') f = -1; s = getchar(); }
while(s >= '0' && s v;
g[u].pb(v);
g[v].pb(u);
}
if(!xorsum){
cout
关注
打赏
- 回坑记之或许是退役赛季?
- [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