hdu3234 带权并查集(XOR)
题意:
给你n个未知的正整数,有三总操作
I P V P的值是V
I P Q V P XOR Q = V
Q K x1 x2....xk 求这k个数所有异或后的值
思路:
带权并查集,感觉这个题目用的很巧,设计到以下知识,a ^ b = c ,a ^ c = b ,b
^ c = a他们三个是等价的,还有就是a ^ b ^ a = b ,这个题目自己好好画画就出来了,确定好带权并查集后可以虚拟出来一个点,把它做为真实点,就是如果谁的根是他那么这个值就已经确定了,我虚拟的是0点,把其他的点都映射成+1,还有就是这个题目的核心部分就是查询的那个地方,除了确定的点,其他的必须是每个集合都出现了偶数个的时候才能算出来,原因就是“性质不同的数不能乘在一起,要么就是相对位置相乘,要么就是确定的数字相乘,两个相对位置相乘的到的是确定的数字,确定的数字相乘得到的还是确定的数字”,这个题目设计到很多细节,我就不说了,谁做谁知道啊!
还有就是提醒个最坑的地方 a ^ b != c 他和 (a ^ b) != c不是等价的,优先级的原因。其他的做的时候就知道了,今天手残,这个题目做了17次才AC.
#include<stdio.h>
#include<string.h> #define N 22000
int mer[N] ,Xor[N];
int ss[N]; int finds(int x)
{
if(x == mer[x]) return x;
int t = mer[x];
mer[x] = finds(mer[x]);
Xor[x] = Xor[x] ^ Xor[t];
return mer[x];
} int main ()
{
int n ,m ,i ,j ,num ,p ,q ,v ,k;
int n1 ,n2 ,n3 ,cas = 1 ,fact ,stop;
char str[10] ,c;
while(~scanf("%d %d" ,&n ,&m) && n + m)
{
printf("Case %d:\n" ,cas ++);
for(i = 0 ;i <= n ;i ++)
mer[i] = i ,Xor[i] = 0;
for(stop = fact = 0 ,i = 1 ;i <= m ;i ++)
{
scanf("%s" ,str);
if(str[0] == 'I')
{
fact ++; int ii = 0;
while(1)
{
scanf("%d%c" ,&num ,&c);
ii ++;
if(ii == 1) n1 = num;
if(ii == 2) n2 = num;
if(ii == 3) n3 = num;
if(c == '\n') break;
}
if(stop) continue;
if(ii == 2)
{
p = n1 + 1 ,v = n2;
int x = finds(p);
if(!x)
{
if(Xor[p] == v) continue;
stop = 1;
printf("The first %d facts are conflicting.\n" ,fact ++);
}
else
{
mer[x] = 0;
Xor[x] = Xor[p] ^ v;
}
}
if(ii == 3)
{
p = n1 + 1 ,q = n2 + 1 ,v = n3;
int x = finds(p) ,y = finds(q);
if(x == y)
{
if((Xor[p] ^ Xor[q]) == v) continue;
stop = 1;
printf("The first %d facts are conflicting.\n" ,fact ++);
}
else
{
if(y)
{
mer[y] = x;
Xor[y] = Xor[p] ^ Xor[q] ^ v;
}
else
{
mer[x] = y;
Xor[x] = Xor[p] ^ Xor[q] ^ v;
}
}
}
}
else
{
scanf("%d" ,&k);
memset(ss ,0 ,sizeof(ss));
int sum = 0 ,mk = 0;
for(j = 1 ;j <= k ;j ++)
{
scanf("%d" ,&num);
num ++;
ss[finds(num)] ++;
sum = sum ^ Xor[num];
}
for(j = 1 ;j <= n ;j ++)
if(ss[j] & 1) mk = 1;
if(stop) continue;
if(mk) puts("I don't know.");
else printf("%d\n" ,sum);
}
}
puts("");
}
return 0;
}
hdu3234 带权并查集(XOR)的更多相关文章
- 【uva12232/hdu3461】带权并查集维护异或值
题意: 对于n个数a[0]~a[n-1],但你不知道它们的值,通过逐步提供给你的信息,你的任务是根据这些信息回答问题: I P V :告诉你a[P] = V I P Q V:告诉你a[P] XOR a ...
- 2017乌鲁木齐区域赛I(带权并查集)
#include<bits/stdc++.h>using namespace std;int f[200010];//代表元long long rl[200010];//记rl[i]为结点 ...
- 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 银河英雄传说(带权并查集)
题目描述 公元五八○一年,地球居民迁移至金牛座α第二行星,在那里发表银河联邦 创立宣言,同年改元为宇宙历元年,并开始向银河系深处拓展. 宇宙历七九九年,银河系的两大军事集团在巴米利恩星域爆发战争.泰山 ...
随机推荐
- LeetCode-[list-of-depth-lcci]
特定深度节点链表-求解每一层二叉树从左到右遍历形成的链表 list-of-depth-lcci 这是关于二叉树的问题,遍历每一层的结点并且存在链表中. 可以采取队列类似于广度优先搜索的方法进行搜索.每 ...
- HDOJ-6656(数论+逆元)
Kejin Player HDOJ-6656 设f[i]为从i升级到i+1期望需要的金钱,由于每级都是能倒退或者升级到i+1,所以询问从l,r的期望金钱可以直接前缀和,那么推导每一级升级需要的期望钱也 ...
- js mysql 时间日期比较
js代码 1 var date1 = '2017/2/13'; 2 //var date1 = new Date().toLocaleDateString(); 3 var date2 = '2017 ...
- Java 面向对象 04
面向对象·四级 多态的概述及其代码实现 * A:多态(polymorphic)概述 * 事物存在的多种形态 * B:多态前提 * a:要有继承关系 * b:要有方法重写 * c: 要有父类引用指向子类 ...
- Redis 高并发带来的一些问题
前言 本文讲述Redis在遇到高并发时的一些问题.即遇到大量请求时需要思考的点,如缓存穿透 缓存击穿 缓存雪崩 热key处理.一般中小型传统软件企业,很难碰到这个问题.如果有大并发的项目,流量有几百万 ...
- WPF 基础 - DataTemplate
如果把控件的功能视为内容,则可以使用控件模板 ControlTemplate 来控制它的展现: 如果把数据视为内容,则可以使用数据模板 DataTemplate 把数据展示出来: ControlTem ...
- WPF 基础 - Binding 的 数据更新提醒
WPF 作为一个专门的展示层技术,让程序员专注于逻辑层,让展示层永远处于逻辑层的从属地位: 这主要因为有 DataBinding 和配套的 Dependency Property 和 DataTemp ...
- Android R 新特性分析及适配指南
Android R(Android 11 API 30)于2020年9月9日正式发布,随国内各终端厂商在售Android设备的版本更新升级,应用软件对Android R 版本的兼容适配已迫在眉睫. 对 ...
- WinForm的Socket实现简单的聊天室 IM
1:什么是Socket 所谓套接字(Socket),就是对网络中不同主机上的应用进程之间进行双向通信的端点的抽象. 一个套接字就是网络上进程通信的一端,提供了应用层进程利用网络协议交换数据的机制. 从 ...
- All I know about A/B Test (1) : 均值型指标与比值(率)型指标的计算区别
因为最近在找实习,所以打算把自己之前学过的关数据分析的知识总结(复习)一下.在总结A/B test时,我发现中文互联网中关于A/B test的总结已经很多了,但是对于均值型指标和比值(率)型指标在设计 ...