定义两点的距离$d(x,y)$为$x$到$y$路径上边权异或和,则两棵树相同当且仅当$\forall 1\le i\le n$,$d(1,i)$相同

新建一个节点0,连边$(0,1)$,初始权值为0,且不能以这条边为对象操作(但操作与1相连的边会影响其)

记$d_{i}=d(0,i)$,考虑一次操作$(x,y)$对$d_{i}$的影响,恰好是交换$d_{x}$和$d_{y}$

最终,令$a_{i}$为目标树中$d(1,i)$的值,即要求$d_{i}\oplus d_{1}=a_{i}$

同时,记$b_{i}$为初始树中$d(0,i)$的值(也即$d(1,i)$),那么$d_{i}$即$b_{i}$重新排列的结果,有$\bigoplus_{i=1}^{n}d_{i}=\bigoplus_{i=1}^{n}b_{i}$

将之代入前者,根据$n$为奇数,可得$d_{1}=\bigoplus_{i=1}^{n}a_{i}\bigoplus_{i=1}^{n}b_{i}$,再判定$d_{1}$是否在本来的$b_{i}$中,以及$b_{i}\oplus d_{1}$是否等于$a_{i}$(排序后的结果)即可

 1 #include<bits/stdc++.h>
2 using namespace std;
3 #define N 100005
4 struct Edge{
5 int nex,to,len1,len2;
6 }edge[N<<1];
7 int E,n,x,y,z1,z2,head[N],a[N],b[N];
8 void add(int x,int y,int z1,int z2){
9 edge[E].nex=head[x];
10 edge[E].to=y;
11 edge[E].len1=z1;
12 edge[E].len2=z2;
13 head[x]=E++;
14 }
15 void dfs(int k,int fa,int s1,int s2){
16 b[k]=s1;
17 a[k]=s2;
18 for(int i=head[k];i!=-1;i=edge[i].nex)
19 if (edge[i].to!=fa)dfs(edge[i].to,k,s1^edge[i].len1,s2^edge[i].len2);
20 }
21 int main(){
22 scanf("%d",&n);
23 memset(head,-1,sizeof(head));
24 for(int i=1;i<n;i++){
25 scanf("%d%d%d%d",&x,&y,&z1,&z2);
26 add(x,y,z1,z2);
27 add(y,x,z1,z2);
28 }
29 dfs(1,0,0,0);
30 for(int i=1;i<=n;i++)b[0]^=a[i];
31 for(int i=1;i<=n;i++)b[0]^=b[i];
32 for(int i=1;i<=n;i++)b[i]^=b[0];
33 sort(a+1,a+n+1);
34 sort(b+1,b+n+1);
35 if (b[1]){
36 printf("NO");
37 return 0;
38 }
39 for(int i=1;i<=n;i++)
40 if (a[i]!=b[i]){
41 printf("NO");
42 return 0;
43 }
44 printf("YES");
45 }

[atAGC052B]Tree Edges XOR的更多相关文章

  1. CF1055F Tree and XOR

    CF1055F Tree and XOR 就是选择两个数找第k大对儿 第k大?二分+trie上验证 O(nlognlogn) 直接按位贪心 维护可能的决策点(a,b)表示可能答案的对儿在a和b的子树中 ...

  2. 解题:CF1055F Tree and XOR

    题面 树上路径是可以通过到根的路径和LCA差出来的,所以建立一棵Trie树按位贪心即可......吗? 发现空间并不够,需要我们每层现建,要记录每个数和它异或答案之后在这一层插进去的编号 #inclu ...

  3. [atAGC052F]Tree Vertices XOR

    结论 注意到如果$x$周围有偶数个1,对$x$操作显然不会改变$a_{x}$,因此不妨强制操作的点周围要有奇数个1,不难发现此时恰好会改变该点,即令$a_{x}=a_{x}\oplus 1$ 称$\{ ...

  4. Weights Assignment For Tree Edges

    题目: (我的题目很长,你忍一下--) 题目分析: 这道题目的体面比较复杂,先是讲了一下树是怎样的一个结构,并且告诉我们在这里,他是以什么样的一种方式描述一棵树的,就是通过描述每个节点的父节点是哪个( ...

  5. codeforces 342E :Xenia and Tree

    Description Xenia the programmer has a tree consisting of n nodes. We will consider the tree nodes i ...

  6. BZOJ3282: Tree

    传送门 又是权限题= =,过了NOIp我就要去当一只权限狗! LCT裸题,get到了两个小姿势. 1.LCA操作应该在access中随时updata 2.Link操作可以更简单 void Link(i ...

  7. CodeForces 682C Alyona and the Tree (树+dfs)

    Alyona and the Tree 题目链接: http://acm.hust.edu.cn/vjudge/contest/121333#problem/C Description Alyona ...

  8. cf202-div 1-B - Apple Tree:搜索,数论,树的遍历

      http://codeforces.com/contest/348/problem/B   B. Apple Tree time limit per test 2 seconds memory l ...

  9. Codeforces Round #358 (Div. 2) C. Alyona and the Tree 水题

    C. Alyona and the Tree 题目连接: http://www.codeforces.com/contest/682/problem/C Description Alyona deci ...

随机推荐

  1. 树莓派3B上手一二

    树莓派3B上手一二 早些时间心血来潮买过一个树莓派,但是当时只是玩一玩,买来按照网上的教程摆弄了一下就闲置了.最近毕业设计,做时序数据分析的相关的工作,刚好想起能够用到树莓派+Node-RED来生成模 ...

  2. 每日总结:Java基本语法 (2021.9.23)

         对象:对象是类的一个实例,有状态和行为. 类:类是一个模板,它描述一类对象的行为和状态. 方法:方法就是行为,一个类可以有很多方法. 实例变量:每个对象都有独特的实例变量,对象的状态由这些实 ...

  3. 洛谷2120 [ZJOI2007]仓库建设(斜率优化dp)

    感觉和锯木厂那个题很类似的. 其实这个题还那个题唯一的区别就是\(dp\)转移式子中的\(f\)变成了\(g\) qwq不想多说了 直接看我的前一篇题解吧qwq #include<iostrea ...

  4. CAD/DWG图Web网页可视化技术之栅格和矢量瓦片

    背景 在上一篇博文中CAD图DWG解析WebGIS可视化技术分析总结提到,实现CAD/DWG图形Web展示的思路一般为解析AutoCAD图形格式,然后转成html5所能绘制的格式如svg,geojso ...

  5. 【Python】 第三周:基本数据类型

    整数 python整数无限制 二进制:以0b或者0B开头,例如: 0b010,-0B101 八进制:以0o或者0O开头,例如:0o123,-0O456 浮点数 浮点数间运算存在不确定尾数,不是bug ...

  6. C++ 与 Visual Studio 2019 和 WSL(三)

    头文件 如果不小心修改了 Linux C/C++ 标准头文件,可以下面这样操作进行恢复: 项目 → 重新扫描解决方案

  7. netty系列之:使用netty实现支持http2的服务器

    目录 简介 基本流程 CleartextHttp2ServerUpgradeHandler Http2ConnectionHandler 总结 简介 上一篇文章中,我们提到了如何在netty中配置TL ...

  8. TX-LCN分布式事务之LCN模式

    什么是LCN模式 LCN模式是TX-LCN分布式事务模式的一种,L-lock-锁定事务单元.C-confirm-确认事务模块状态. notify-通知事务单元 原理 LCN模式是通过Spring AO ...

  9. Java:ConcurrentHashMap类小记-1(概述)

    Java:ConcurrentHashMap类小记-1(概述) 对 Java 中的 ConcurrentHashMap类,做一个微不足道的小小小小记,分三篇博客: Java:ConcurrentHas ...

  10. zlib开发笔记(四):zlib库介绍、编译windows vs2015x64版本和工程模板

    前言   Qt使用一些压缩解压功能,介绍过libzip库编译,本篇说明zlib库.需要用到zlib的msvc2015x64版本,编译一下.   版本编译引导 zlib在windows上的mingw32 ...