题目

题目叙述来自思路来源,懒得敲了2333……

思路来源

https://blog.csdn.net/XY20130630/article/details/50638922

题解

考虑,把Xp XOR Xq=v这样的关系建成边,不妨p为root,则q与其相连,且置q的置为v,代表一种相对关系

后续,带权并查集维护的,也都是到祖先的这条链的异或值

Xp=v的一类型操作,将其视为Xp XOR 0=v,

由于原先的点的下标为0到n-1,则建一个虚点n,作一类型的0点,

考虑合并过程,如果相同祖先,但是到根的距离不满足差z的关系,则不合法

否则合法,按带权并查集的思想,若将px合并到py上去,

则将px的距离用py->y y->x x->px的关系,重新定义px的值

然后考虑询问,对每一堆相同rt的单独考虑,不同root的互不影响

不妨设x1,x2,...,xm的根相同,则由于每个值v[xi]是与根root的异或值,

最后的答案是,

如果root的个数为偶,显然是可以消掉的;

为奇的话,由于root的值可以改变式子的值,故此时答案不唯一

具体实现的时候,特判一下root是不是虚点n

代码

#include<bits/stdc++.h>
using namespace std;
const int N=2e4+10,M=300,K=20;
int n,q,k,x,y,z,par[N],v[N],ask[K];
char s[N];
bool vis[K];
void init(int n){for(int i=0;i<=n;++i){par[i]=i;v[i]=0;}
}
int find(int x){if(par[x]==x)return x;int fa=par[x];//直接基类par[x]=find(par[x]);//路径压缩v[x]^=v[fa];//树上前缀和 两链变一链 直接连树根return par[x];//返回树根
}
//y^x=z
bool unite(int x,int y,int z){int px=find(x),py=find(y);if(px==py){if((v[x]^v[y])!=z)return 0;return 1;}if(px==n){//n为不动点 只能为根swap(px,py);}par[px]=py;v[px]=v[y]^z^v[x];return 1;
}
int query(){int fa,ans=0,num;for(int i=1;i<=k;++i){if(vis[i])continue;vis[i]=1;fa=find(ask[i]);ans^=v[ask[i]];num=1;for(int j=i+1;j<=k;++j){if(vis[j])continue;if(find(ask[j])==fa){vis[j]=1;ans^=v[ask[j]];num++;}}if((num&1) && fa!=n){return -1;}}return ans;
}
int main(){int c=0;while(~scanf("%d%d",&n,&q)){if(!n && !q)break;bool non=false;int fac=0;init(n);printf("Case %d:\n",++c);while(q--){scanf("%s",s);if(s[0]=='I'){fac++;getchar();fgets(s,250,stdin);int sp=0;//spacefor(int i=0;s[i];++i){sp+=(s[i]==' ');}if(sp==1){sscanf(s,"%d%d",&x,&z);y=n;}else{sscanf(s,"%d%d%d",&x,&y,&z);}if(non)continue;if(!unite(x,y,z)){printf("The first %d facts are conflicting.\n",fac);non=true;}}else{scanf("%d",&k);for(int i=1;i<=k;++i){vis[i]=0;scanf("%d",&ask[i]);}if(non)continue;int ans=query();if(ans==-1)puts("I don't know.");else printf("%d\n",ans);}}puts("");}return 0;
}

hdu3234 Exclusive-OR(带权并查集)相关推荐

  1. hdu3234 带权并查集(XOR)

    题意:       给你n个未知的正整数,有三总操作       I P V            P的值是V       I P Q V          P XOR Q = V       Q K ...

  2. HDU-3234 Exclusive-OR 异或带权并查集

    题目描述 现在有n个数,X0,X1,-,Xn-1,你并不知道这n个数的大小,然后接下来有Q个询问,询问的格式如下 1) I p v, 告诉你 Xp = v 2) I p q v, 告诉你 Xp ^ X ...

  3. 2017乌鲁木齐ICPC: I. A Possible Tree(带权并查集)

    I. A Possible Tree Alice knows that Bob has a secret tree (in terms of graph theory) with n nodes wi ...

  4. 2017乌鲁木齐区域赛I(带权并查集)

    #include<bits/stdc++.h> using namespace std; int f[200010];//代表元 long long rl[200010];//记rl[i] ...

  5. BZOJ 2303 方格染色(带权并查集)

    要使得每个2*2的矩形有奇数个红色,如果我们把红色记为1,蓝色记为0,那么我们得到了这2*2的矩形里的数字异或和为1. 对于每个方格则有a(i,j)^a(i-1,j)^a(i,j-1)^a(i-1,j ...

  6. POJ1703带权并查集(距离或者异或)

    题意:       有两个黑社会帮派,有n个人,他们肯定属于两个帮派中的一个,然后有两种操作 1 D a b 给出a b 两个人不属于同一个帮派 2 A a b 问a b 两个人关系 输出 同一个帮派 ...

  7. POJ1988(带权并查集,搬砖块)

    题意:        可以这样理解,有n快方形积木,一开始都是单独的放到哪,然后有两种操作 1 M a b 把a所在的那一堆落到b所在那一堆的上面(一开始自己是一堆) 2 C a 问a下面有多少个积木 ...

  8. LA3027简单带权并查集

    题意:       有n个点,一开始大家都是独立的点,然后给出一些关系,a,b表示a是b的父亲节点,距离是abs(a-b)%1000,然后有一些询问,每次询问一个节点a到父亲节点的距离是多少? 思路: ...

  9. hdu4829 带权并查集(题目不错)

    题意: Information Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tot ...

最新文章

  1. 如何征服Webpack 4并构建一个出色的React应用
  2. GNU make manual 翻译( 一百八十三)
  3. mysql选择索引逻辑_Mysql索引选择逻辑
  4. 时序轮转的意思_天地是景框时序轮转的风景----(傻女人)
  5. 自然语言处理 —— 2.2 使用词嵌入
  6. mysql5.7复制集_技术分享 | 克隆:更优雅的创建 MySQL 实例副本
  7. 文本文件 java_Java入门:读写文本文件
  8. python自定义函数如何命名_Python 自定义类之函数和运算符重载
  9. 计算机子网掩码在线,IP地址计算器
  10. 树莓派linux系统识别u盘启动,U盘安装树莓派系统,利用U盘启动Raspberry
  11. 微信小程序图片显示模式
  12. 线上软文自媒体推广怎么做,软文推广有什么好处?
  13. 用python制作英文字典的分析_分享一个自己做的英文科学写作检查器
  14. 《少年pi》:每个人心中都有一只孟…
  15. 你有花生我有酒,一本学道看一天(二)
  16. 用c语言对图像进行模板匹配,[转载]模板匹配的基本概念
  17. unity保存游戏对象到mysql_Unity实现游戏存档框架
  18. 新来个技术总监要我做一个 IP 属地功能~
  19. Jupyter Notebook(Anaconda)【快捷键】
  20. 表格渲染 解决BootStrap3徽章没有背景颜色的问题(BootStrap4有)

热门文章

  1. 【天光学术】会计学论文:管理会计在供应链管理中的应用
  2. HDR in OpenGL
  3. 使用Selenium含蓄等待获取页面元素(附带实际业务需求情景)
  4. centos 安装Broadcom网卡驱动
  5. CAD二次开发 ZOOM 居中视野
  6. php 获取鼠标轨迹,记录鼠标的轨迹并回放的js代码_javascript技巧
  7. Python查询和更新版本号的常用命令行
  8. 【百科】CLEO 逐推縮寫命名法
  9. 联想安装Linux系统
  10. dac0832控制电机驱动流程图_直流电机闭环调速课程设计上机指导