hdu 3234 Exclusive-OR
Exclusive-OR
题意:输入n个点和Q次操作(1 <= n <= 20,000, 2 <= Q <= 40,000).操作和叙述的点标号k(0 < k < n)
操作分为I & Q两种,I又分为 I a v表示val[a] = v和 I a b v 即val[a] ^ val[b] = v; Q k X0,X1...Xk-1表示求出X0^X1^...^Xk-1 = ?
对于每个Q操作,结果分为 I don't know.即不能求解或输出确定值,对于每组叙述操作,若叙述与之前的矛盾则输出改标号:The first 2 facts are conflicting.且该组后面的操作直接忽略;
0 0
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string.h>
#include<algorithm>
#include<map>
#include<queue>
#include<vector>
#include<cmath>
#include<stdlib.h>
#include<time.h>
using namespace std;
#define rep0(i,l,r) for(int i = (l);i < (r);i++)
#define rep1(i,l,r) for(int i = (l);i <= (r);i++)
#define rep_0(i,r,l) for(int i = (r);i > (l);i--)
#define rep_1(i,r,l) for(int i = (r);i >= (l);i--)
#define MS0(a) memset(a,0,sizeof(a))
#define MS1(a) memset(a,-1,sizeof(a))
const int MAXN = ;
int n,f[MAXN];
int XOR[MAXN],id[MAXN<<];//每个点到根节点(压缩之后)的XOR,以及Q查询的id;
int Find(int a)//**
{
if(a == f[a]) return a;
int fa = Find(f[a]);
XOR[a] ^= XOR[f[a]];
return f[a] = fa;
}
bool _union(int a,int b,int v)
{
int fa = Find(a),fb = Find(b);
if(fa == fb){//同一个集合就可以计算出两个点之间的异或值;和下面的偶数一致
if((XOR[a] ^ XOR[b]) != v) return false;
return true;
}
if(fa == n) swap(fa,fb);//是对于输入了a,b,v来看的,并不是对a v,b = n来设置的
f[fa] = fb;
XOR[fa] = XOR[b]^v^XOR[a];
return true;
}
char op[];
int vis[];
int Query(int k)
{
MS0(vis);
int ans = ;
rep0(i,,k){
int cnt = ;
int root = Find(id[i]);
rep0(j,i,k){
if(!vis[j] && Find(id[j]) == root){//同属一个集合;
cnt++;
vis[j] = true;
ans ^= XOR[id[j]];
}
}
if(root != n && (cnt & )) return -;
}
return ans;
}
int main()
{
int Q,kase = ;
while(scanf("%d%d",&n,&Q) == && n + Q){
rep1(i,,n) f[i] = i,XOR[i] = ;
printf("Case %d:\n",kase++);
int cnt_i = ,flag = ;
while(Q--){
scanf("%s",op);
if(op[] == 'I'){
int space = ,a,b,v;
cnt_i++;
getchar();gets(op);
rep0(i,,strlen(op))if(op[i] == ' ') space++;
if(space & ){
sscanf(op,"%d%d",&a,&v);
b = n;
}else{
sscanf(op,"%d%d%d",&a,&b,&v);
}
//printf(" %d %d %d\n",a,b,v);
if(!flag && !_union(a,b,v)){
printf("The first %d facts are conflicting.\n",cnt_i);
flag = ;
}
}else{
int k;
scanf("%d",&k);
rep0(i,,k){
scanf("%d",id+i);
}
if(flag)continue;
int ret = Query(k);
if(ret == -) puts("I don't know.");
else printf("%d\n",ret);
}
}
puts("");
}
return ;
}
hdu 3234 Exclusive-OR的更多相关文章
- HDU 4919 Exclusive or (数论 or 打表找规律)
Exclusive or 题目链接: http://acm.hust.edu.cn/vjudge/contest/121336#problem/J Description Given n, find ...
- hdu 4919 Exclusive or
Exclusive or Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others) T ...
- hdu 3234 Exclusive-OR (并查集)
Problem - 3234 题意不难理解,就是给出一些断言,以及一些查询,回答查询或者在找到断言矛盾以后沉默不做任何事. 这题其实就是一个并查集的距离存储问题,只要记录并查集元素的相对值以及绝对值就 ...
- hdu 3234 并查集
虚拟一个根节点n,设其值为0.并且始终保持其为根. #include<map> #include<set> #include<cmath> #include< ...
- [JAVA]HDU 4919 Exclusive or
题意很简单, 就是给个n, 算下面这个式子的值. $\sum\limits_{i=1}^{n-1} i \otimes (n-i)$ 重点是n的范围:2≤n<10500 比赛的时候 OEIS一下 ...
- HDU 4919 Exclusive or 数学
题意: 定义 \[f(n)=\sum\limits_{i=1}^{n-1}(i\oplus (n-i))\] 求\(f(n),n \leq 10^{500}\) 分析: 这个数列对应OEIS的A006 ...
- HDU 1710 二叉树的遍历 Binary Tree Traversals
Binary Tree Traversals Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/O ...
- HDU 4069 Squiggly Sudoku(DLX)(The 36th ACM/ICPC Asia Regional Fuzhou Site —— Online Contest)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4069 Problem Description Today we play a squiggly sud ...
- 【转载】图论 500题——主要为hdu/poj/zoj
转自——http://blog.csdn.net/qwe20060514/article/details/8112550 =============================以下是最小生成树+并 ...
随机推荐
- 常见android手机分辨率(xxhdpi,xhdpi)
手机常见分辨率: 4:3 VGA 640*480 (Video Graphics Array) QVGA 320*240 (Quarter VGA) HVGA 480*320 (Half-size V ...
- phpcms v9 模板标签说明整理
1.{template "content","header"} 2.网站网址调用:{siteurl($siteid)}: 3.标签get:分页,{pc:get ...
- JAVA获取CLASSPATH路径--转
ClassLoader提供了两个方法用于从装载的类路径中取得资源: public URL getResource(String name); public InputStream ge ...
- Using zend-navigation in your Album Module
Using zend-navigation in your Album Module In this tutorial we will use the zend-navigation componen ...
- JQuery+EasyUI弹窗代码
来源:http://www.cnblogs.com/taven/p/3330125.html <head>需要引用的文件: <link href="../JS/EasyUi ...
- Android(java)学习笔记122:TabActivity使用
1.首先我们要知道TabActivity是结合TabHost使用的,于是我们自然而然要说明一下TabHost 所谓的TabHost是提供选项卡(Tab页)的窗口视图容器. 此对象包含两个子对象: 一个 ...
- truncate和 delete的区别:
1.一个表要删除全部数据如何实现:①delete,②truncate EG:删除a表中的所有数据: CREATE TABLE `b` ( `id` int(11) NOT NULL AUTO_INCR ...
- c++ 拷贝构造练习
#include<iostream> using namespace std; class Vector { private: int *dwp; int size; void clone ...
- 局域网内sqldeveloper客户端连接oracle服务器
1:输入参数 输入连接名(随便写) 用户名:system/tiger/sys或者是创建的用户 口令:设置的口令 主机名:连接的数据库所在的ip 端口:默认是1521 sid:orcl安装时自己设置的 ...
- Linux Shell产生16进制随机数
n为字符长度 openssl rand -hex n