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
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?