Exclusive-OR(带权并查集)
Exclusive-OR |
| Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) |
| Total Submission(s): 152 Accepted Submission(s): 55 |
|
Problem Description
You are not given n non-negative integers X0, X1, ..., Xn-1 less than 220 , but they do exist, and their values never change.
I'll gradually provide you some facts about them, and ask you some questions. There are two kinds of facts, plus one kind of question:
|
|
Input
There will be at most 10 test cases. Each case begins with two integers n and Q (1 <= n <= 20,000, 2 <= Q <= 40,000). Each of the following lines contains either a fact or a question, formatted as stated above. The k parameter in the questions will be a positive integer not greater than 15, and the v parameter in the facts will be a non-negative integer less than 220. The last case is followed by n=Q=0, which should not be processed.
|
|
Output
For each test case, print the case number on its own line, then the answers, one on each one. If you can't deduce the answer for a particular question, from the facts I provide you before that question, print "I don't know.", without quotes. If the i-th fact (don't count questions) cannot be consistent with all the facts before that, print "The first i facts are conflicting.", then keep silence for everything after that (including facts and questions). Print a blank line after the output of each test case.
|
|
Sample Input
2 6 |
|
Sample Output
Case 1: |
|
Source
2009 Asia Wuhan Regional Contest Hosted by Wuhan University
|
|
Recommend
chenrui
|
/*
题意:有n个数,但是n个数还没确定,有两种操作:
I:p v告诉你Xp的值。
I:p q v告诉你Xp^Xq=v。
Q:k p1 p2...pk 询问 Xp1^Xp2...^Xpk=?
如果I操作有矛盾请指出。 初步思路:带权并查集。r[i]数组表示i与根节点的异或值,查询的时候,r[a]^r[b]实际上就是a^b的值,因为,父节点的已经
已经异或掉了,很显然如果是奇数个肯定是求不出来的
*/
#include<bits/stdc++.h>
using namespace std;
int n,m,k;
char op[];
int num[];//存放各种数据
int father[];//存储i的父节点
int r[];//存放i与父节点的异或
int vis[];//记录访问过的点
int ca=;
int u,v,c;
char str[];
int times=;//用来记录I操作进行了几次
int findx(int x){
if(x!=father[x])
{
int fx = father[x];
father[x] = findx(father[x]);
r[x]^=r[fx];
}
return father[x];
}
bool Union(int x,int y,int z){
int fx=findx(x);
int fy=findx(y);
if(fx==fy){
if((r[x]^r[y])!=z)
return false;
return true;
}
if(fx==n) swap(fx,fy);
father[fx]=fy;
r[fx] = r[x]^r[y]^z;
return true;
}
int query(){
memset(vis,,sizeof vis);
int ans=;
for(int i=;i<k;i++){
if(vis[i]) continue;
int cnt=;
int root=findx(num[i]);
for(int j=i;j<k;j++) {
if(!vis[j] && root == findx(num[j])){
vis[j] = ;
cnt++;
ans^=r[num[j]];
}
}
if(root!=n&&(cnt&)){
return -;
}
}
return ans; }
void init(){
memset(r,,sizeof r);
for(int i=;i<=n;i++){
father[i]=i;
}
times=;
}
int main(){
// freopen("in.txt","r",stdin);
while(scanf("%d%d",&n,&m)!=EOF&&(n+m)){
init();
printf("Case %d:\n",ca++);
bool flag=false;//表示命令的正确性
for(int i=;i<m;i++){
scanf("%s",op);
// cout<<op<<" ";
getchar();
if(op[]=='I'){
times++;
gets(str);
// cout<<str<<endl;
if(flag) continue;
int cur=;
for(int i=;str[i];i++){
if(str[i]==' ') cur++;
}
if(cur==){//u c
sscanf(str,"%d%d",&u,&c);
v=n;
// cout<<u<<" "<<c<<endl;
}else{//u v c
sscanf(str,"%d%d%d",&u,&v,&c);
// cout<<u<<" "<<v<<" "<<c<<endl;
}
if(!Union(u,v,c))
{
printf("The first %d facts are conflicting.\n",times);
flag = true;
}
}else{
scanf("%d",&k);
// cout<<k<<" ";
for(int i=;i<k;i++){
scanf("%d",&num[i]);
// cout<<num[i]<<" ";
}
// cout<<endl;
if(flag) continue;
int ans = query();
if(ans == -)
printf("I don't know.\n");
else
printf("%d\n",ans);
}
}
// for(int i=0;i<n;i++){
// cout<<father[i]<<" ";
// }
// cout<<endl;
printf("\n");
}
return ;
}
Exclusive-OR(带权并查集)的更多相关文章
- POJ 1703 Find them, Catch them(带权并查集)
传送门 Find them, Catch them Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 42463 Accep ...
- [NOIP摸你赛]Hzwer的陨石(带权并查集)
题目描述: 经过不懈的努力,Hzwer召唤了很多陨石.已知Hzwer的地图上共有n个区域,且一开始的时候第i个陨石掉在了第i个区域.有电力喷射背包的ndsf很自豪,他认为搬陨石很容易,所以他将一些区域 ...
- poj1417 带权并查集 + 背包 + 记录路径
True Liars Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 2713 Accepted: 868 Descrip ...
- poj1984 带权并查集(向量处理)
Navigation Nightmare Time Limit: 2000MS Memory Limit: 30000K Total Submissions: 5939 Accepted: 2 ...
- 【BZOJ-4690】Never Wait For Weights 带权并查集
4690: Never Wait for Weights Time Limit: 15 Sec Memory Limit: 256 MBSubmit: 88 Solved: 41[Submit][ ...
- hdu3038(带权并查集)
题目链接: http://acm.split.hdu.edu.cn/showproblem.php?pid=3038 题意: n表示有一个长度为n的数组, 接下来有m行形如x, y, d的输入, 表示 ...
- 洛谷OJ P1196 银河英雄传说(带权并查集)
题目描述 公元五八○一年,地球居民迁移至金牛座α第二行星,在那里发表银河联邦 创立宣言,同年改元为宇宙历元年,并开始向银河系深处拓展. 宇宙历七九九年,银河系的两大军事集团在巴米利恩星域爆发战争.泰山 ...
- poj1984 带权并查集
题意:有多个点,在平面上位于坐标点上,给出一些关系,表示某个点在某个点的正东/西/南/北方向多少距离,然后给出一系列询问,表示在第几个关系给出后询问某两点的曼哈顿距离,或者未知则输出-1. 只要在元素 ...
- poj1611 带权并查集
题意:病毒蔓延,现在有 n 个人,其中 0 号被认为可能感染,然后给出多个社交圈,如果某个社交圈里有人被认为可能被感染,那么所有这个社交圈里的人都被认为可能被感染,现在问有多少人可能被感染. 带权并查 ...
- hdu 1829-A Bug's LIfe(简单带权并查集)
题意:Bug有两种性别,异性之间才交往, 让你根据数据判断是否存在同性恋,输入有 t 组数据,每组数据给出bug数量n, 和关系数m, 以下m行给出相交往的一对Bug编号 a, b.只需要判断有没有, ...
随机推荐
- All about Div内显示滚动桥
Div内显示滚动桥看似是一个简单的前端问题,然而实际会发现还是有挺多需要注意的, 本文尝试对div内显示滚动桥的各种主要实现及一些难题进行研究. 横向滚动桥 横向滚动桥比较简单,无需设置宽度,直接ov ...
- 使用.net 自建短链接(短网址)
短连接大家都不陌生,例如新浪的 t.cn .京东的 3.cn .淘宝的 tb.cn 等等.都已经是家喻户晓的短连接域名.不知道有多少人像我一样,对短连接原理好奇而且尝试自建了呢? 今天发布这个文章的目 ...
- 外设位宽为8、16、32时,CPU与外设之间地址线的连接方法
有不少人问到:flash连接CPU时,根据不同的数据宽度,比如16位的NOR FLASH (A0-A19),处理器的地址线要(A1-A20)左移偏1位.为什么要偏1位? (全文有点晦涩,建议收藏本文对 ...
- C++Builder中MessageBox的基本用法
C++Builder中MessageBox的基本用法 返回值:IDYES=Application->MessageBox("","",MBYESNO) i ...
- 基于Quartz实现简单的定时发送邮件
一.什么是Quartz Quartz 是一个轻量级任务调度框架,只需要做些简单的配置就可以使用:它可以支持持久化的任务存储,即使是任务中断或服务重启后,仍可以继续运行.Quartz既可以做为独立的应用 ...
- @htmlhepler dropdownlistfor 报错
说系统的字段不匹配. 是因为ViewData,没有赋值.
- 寻找bug并消灭系列——记录在Android开发所遇到的bug(二)
bug 1: bug描述: 无法成功地将edittext中的内容传入数据库中 bug动图: 经过: 最近写了个项目,项目要使用到SQL数据库,由于没有相关知识,便是找到了各种资料开始了自学之旅,在de ...
- Ubuntu16.04 install android-studio-ide-162.4069837-linux
本文讲解如何在Ununtu 16.04上安装jdk.Android Sdk.Anroid Studio.Genymotion.AndroidStudio与Genymotion绑定. 由于第一次装了双系 ...
- dotweb框架之旅 [二] - 常用对象-App(dotweb)
dotweb属于一个Web框架,希望通过框架行为,帮助开发人员快速构建Web应用,提升开发效率,减少不必要的代码臃肿. dotweb包含以下几个常用对象: App(dotweb) App容器,为Web ...
- Linux基本符号
Linux环境下一些常用的符号 ; 多个命令的分隔符 / 根目录或路径分隔符 > 重定向,数据沿箭头方向流动,原来文件内容会被丢弃 >> 追加重定向,在原来文件结尾追加内容 .. 上 ...
