定义两点的距离$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 }

最新文章

  1. Web services 安全 - HTTP Basic Authentication
  2. x265
  3. 苹果将通过新Apple TV打造电视游戏平台 欲发力家庭游戏(转)
  4. Android异步操作总结
  5. 自定义程序异常Exception
  6. UE4联机多人游戏基本设置
  7. 2018-04-27 搭建Python官方文档翻译环境-汉化示例代码
  8. python 模块二(os,json,pickle)
  9. Uva297 Quadtrees【递归建四分树】【例题6-11】
  10. MySQL学习----各种字符的长度总结
  11. eclipse环境的搭建(转载)
  12. SqlServer Case when then用法总结
  13. [Android] Implementation vs API dependency
  14. Asp.net GridView转换成DataTable
  15. MyEclipse个性化设置
  16. Laravel5.5 引入并使用第三方类库操作
  17. Netty Channel 接口名词理解
  18. centos 7 生成文件名乱码的问题如何解决?
  19. 简单理解Javascript中的call 和 apply
  20. docker 镜像的配置文件修改

热门文章

  1. 运用shapefile.js解析Shp文件
  2. [AGC023D] Go Home 题解
  3. Java读取属性配置文件-properties
  4. Java(11)方法详细介绍
  5. Python代码阅读(第21篇):将变量名称转换为蛇式命名风格
  6. 【数据结构 C++】排序——冒泡、插入、选择、希尔、归并、快排、堆排序
  7. vue3.x组件间通信,实用小技巧都在这里
  8. Request failed with status code 500以及自引用循环Self referencing loop detected for property ‘xx‘ with type
  9. Noip模拟66 2021.10.2
  10. Linux下Zabbix5.0 LTS监控基础原理及安装部署(图文教程)