Codeforces Round #746 Div. 2
掉分快乐qwq
C题代码以及分析(在注释里)
/*
* @Author: Nan97
* @Date: 2021-10-04 22:37:18
* @Last Modified by: Nan97
* @Last Modified time: 2021-10-04 22:49:02
*/
#include <iostream>
#include <cstring>
#define rep(i, b, s) for(register int i = (b); i <= (s); ++i)
#define pre(i, b, s) for(register int i = (b); i >= (s); --i)
using namespace std;
const int N = 1e5 + 10, M = N << 1;
int a[N], e[M], ne[M], h[N], idx, xx[N];
int n, k, xo;
int cnt;
inline void add(int a, int b) {
e[idx] = b;
ne[idx] = h[a];
h[a] = idx ++;
}
inline void out(bool flag);
int dfs(int u, int fa) {
int res = a[u];
for(int i = h[u]; ~i; i = ne[i]) {
int j = e[i];
if(j == fa)
continue;
int t = dfs(j, u);
if(t == xo) cnt ++; //如果是异或和xor 我们就 _可以_ 剪掉
else res ^= t; //否则不可以
}
return res;
}
inline void solve() {
// 题目分析
/*
*对于分割的每一个子树的异或和都为一个相同的值 假设为res
*假设树中全部节点的异或和为xor
*我们现在想一个式子 假设 a^b^c = x && a = b = c 我们可以推出 a = b = c = x
*可以扩展到>=3个数字的异或
*那么对于2个数字,a^b = x && a = b 那么只有一种可能 x = 0
*因此题目可以分类讨论一下 如果k=2 也就是只能分割k-1=1次
*此时只有xor = 0 的时候成,并且一定成立
*k>2
*所以这个树要分为几段异或和均为xor的子树
*肯定是奇数段 因为偶数段xor肯定为0 属于上面的那种情况内
*我们再看这么一个式子, a ^ a ^ a = a 此式显然成立
*上式可以推广到奇数个a的异或和为a
*上式意义何在? 只要结果异或和为xor的子树超过1个(一定为奇数) 那么肯定可以合并为3个
*并且k>2 (k的另一层含义为分为 k 个部分,和割k-1次意义相同)
*因此我们只需要找到除根节点外的子树异或和为xor的个数 >1 即可
*/
idx = 0, xo = 0, cnt = 0;
cin >> n >> k;
memset(h, -1, sizeof h[0] * (n + 1));
rep(i, 1, n) {
cin >> a[i];
xo ^= a[i];
}
rep(i, 1, n - 1) {
int u, v;
cin >> u >> v;
add(u, v); add(v, u);
}
if(!xo) {
out(1);
return;
}
dfs(1, -1);
if(k <= 2)
out(0);
else
out(cnt > 1);
}
signed main()
{
int T = 1; cin >> T;
while(T -- ) {
solve();
}
return 0;
}
inline void out(bool flag) {
if(flag) puts("YES");
else puts("NO");
}
Codeforces Round #746 Div. 2的更多相关文章
- Codeforces Round #366 (Div. 2) ABC
Codeforces Round #366 (Div. 2) A I hate that I love that I hate it水题 #I hate that I love that I hate ...
- Codeforces Round #354 (Div. 2) ABCD
Codeforces Round #354 (Div. 2) Problems # Name A Nicholas and Permutation standard input/out ...
- Codeforces Round #368 (Div. 2)
直达–>Codeforces Round #368 (Div. 2) A Brain’s Photos 给你一个NxM的矩阵,一个字母代表一种颜色,如果有”C”,”M”,”Y”三种中任意一种就输 ...
- cf之路,1,Codeforces Round #345 (Div. 2)
cf之路,1,Codeforces Round #345 (Div. 2) ps:昨天第一次参加cf比赛,比赛之前为了熟悉下cf比赛题目的难度.所以做了round#345连试试水的深浅..... ...
- Codeforces Round #279 (Div. 2) ABCDE
Codeforces Round #279 (Div. 2) 做得我都变绿了! Problems # Name A Team Olympiad standard input/outpu ...
- Codeforces Round #262 (Div. 2) 1003
Codeforces Round #262 (Div. 2) 1003 C. Present time limit per test 2 seconds memory limit per test 2 ...
- Codeforces Round #262 (Div. 2) 1004
Codeforces Round #262 (Div. 2) 1004 D. Little Victor and Set time limit per test 1 second memory lim ...
- Codeforces Round #371 (Div. 1)
A: 题目大意: 在一个multiset中要求支持3种操作: 1.增加一个数 2.删去一个数 3.给出一个01序列,问multiset中有多少这样的数,把它的十进制表示中的奇数改成1,偶数改成0后和给 ...
- Codeforces Round #268 (Div. 2) ABCD
CF469 Codeforces Round #268 (Div. 2) http://codeforces.com/contest/469 开学了,时间少,水题就不写题解了,不水的题也不写这么详细了 ...
随机推荐
- Codeforces 450D:Jzzhu and Cities(最短路,dijkstra)
D. Jzzhu and Cities time limit per test: 2 seconds memory limit per test: 256 megabytes input: stand ...
- oracle函数listagg使用
作用 可以实现将多列记录聚合为一列记录,实现数据的压缩 语法结构 listagg(measure_expr,delimiter) within group ( order by order_by_cl ...
- Vue.js高效前端开发 • 【Vue列表渲染】
全部章节 >>>> 文章目录 一.v-for指令 1.v-for指令使用 2.实践练习(待更新) 二.计算属性 1.计算属性创建和使用 2.实践练习(待更新) 三.侦听属性 1 ...
- 使用 IE 或Chrome等浏览器,通过网络抓包的形式,查看发送请求时的网络
要求: 使用 IE 或Chrome等浏览器,通过网络抓包的形式,查看发送请求时的网络 实现步骤: 1.打开 IE 浏览器,选择"开发者工具",切换到"网络"标签 ...
- XML解析的四种方式
1.说明 XML是EXtensible Markup Language, 即可扩展标记语言, 是一种通用的数据交换格式, 它的平台无关性.语言无关性.系统无关性, 给数据集成与交互带来了极大的方便. ...
- Hadoop编译打包记录
Hadoop编译打包,基于2.7.2版本的源码. # 打包过程中需要使用到的工具 java -version mvn -version ant -version type protoc type cm ...
- Canvas原生API(纯CPU)计算并渲染三维图
Canvas原生API(纯CPU)计算并渲染三维图 前端工程师学图形学:Games101 第三次作业 利用Canvas画三维中的三角形并使用超采样实现抗锯齿 最终完成功能 Canvas 原生API实现 ...
- centos6.5 搭建zabbix3.0
一.搭建LAMP平台 注意zabbix3.0需要php5.4以上的版本 (1)安装依赖包 httpd和mysql安装过程省略 rpm -e httpd --nodeps yum -y install ...
- textarea换行符转换
/** * @description textarea换行符转指定字符 * @param str:要放到textarea的字符串 * @param code:要转换成换行的字符,默认为',' */ e ...
- 使用.NET 6开发TodoList应用(24)——实现基于JWT的Identity功能
系列导航及源代码 使用.NET 6开发TodoList应用文章索引 需求 在.NET Web API开发中还有一个很重要的需求是关于身份认证和授权的,这个主题非常大,所以本文不打算面面俱到地介绍整个主 ...