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 =============================以下是最小生成树+并 ...
随机推荐
- mysql使用心得
SET FOREIGN_KEY_CHECKS=0; -- ------------------------------ Table structure for `staff`-- ---------- ...
- C#_delegate - 用委托实现事件,Display和Log类都使用Clock对象
//public event SecondChangeHandler OnSecondChange; 若将委托加上event,则视作是事件,不是委托,外围就不能直接对OnSecondChange传值 ...
- java专业规划(转载)
1. Java语言基础 谈到Java语言基础学习的书籍,大家肯定会推荐Bruce Eckel的<Thinking in Java>.它是一本写的相当深刻的技术书籍,Java语言基础 ...
- 如何强化 TCP/IP 堆栈
TCP/IP 是一种本质上不安全的协议.但是,Windows 2000 实现可以使您配置其操作以防止网络的拒绝服务攻击.默认情况下,本文中所涉及的一些项和值可能并不存在.在这些情况下,请创建该项.值或 ...
- JS类型(1)_JS学习笔记(2016.10.02)
js类型 js中的数据类型有undefined,boolean,number,string,null,object等6种,前5种为原始类型(基本类型),基本类型的访问是按值访问的,就是说你可以操作保存 ...
- 关于Eclipse插件开发(四)-------给视图加下拉菜单和按钮和加入编辑器.
本例将给视图加入下拉菜单和按钮,同时再为列表添加一个右键菜单. 创建ActionGroup类 加入菜单和按钮的方法与SWT和JFace组件的一样,先创建一个ActionGroup代码如下: MyAct ...
- windows共享文件夹如何让CentOS 6.5读取
http://www.111cn.net/sys/CentOS/74104.htm 工作需要,需要把本地win7共享的文件夹让CenotOS 6.5服务器临时使用一下,以下是CentOS 6.5系统挂 ...
- 使用adb devices命令,老是报error:device offline的错误。
刚开始报error:devices not found 重新安装adb 驱动. 解决方法: adb kill-server adb start-server adb remount 再使用adb de ...
- win32项目设置窗口全屏
创建窗口的时候设置样式:CreateWindow(,,WS_MAXIMIZE,……): 显示窗口的时候设置:ShowWindow(hWnd,SM_MAXIMIZE);
- 通过公网连接云数据库Memcache--ECS Windows篇
目前云数据库Memcache是需要通过ECS的内网进行连接访问,如果用户本地需要通过公网访问云数据库Memcache,可以在ECS Windows云服务器中通过netsh进行端口映射实现. 一.搭建要 ...