hdu 3234 Exclusive-OR (并查集)
题意不难理解,就是给出一些断言,以及一些查询,回答查询或者在找到断言矛盾以后沉默不做任何事。
这题其实就是一个并查集的距离存储问题,只要记录并查集元素的相对值以及绝对值就可以了。
代码如下:
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
#include <stack>
#include <set> using namespace std; const int N = ;
struct MFS {
int fa[N], rel[N], val[N];
void init() { for (int i = ; i < N; i++) fa[i] = i, rel[i] = , val[i] = -;}
int find(int x) {
if (fa[x] != x) {
int fx = find(fa[x]);
rel[x] ^= rel[fa[x]];
fa[x] = fx;
val[x] = val[fx] ^ rel[x];
return fx;
} else return x;
}
bool merge(int x, int y, int d) {
int fx = find(x), fy = find(y);
if (fx == fy) return d == (rel[x] ^ rel[y]);
int dx = rel[x] ^ rel[fx], dy = rel[y] ^ rel[fy];
if (~val[fx] && ~val[fy]) return d == (dx ^ dy ^ val[fx] ^ val[fy]);
d ^= dx ^ dy;
if (~val[fx]) rel[fy] ^= d, fa[fy] = fx;
else rel[fx] ^= d, fa[fx] = fy;
return true;
}
bool confirm(int x, int d) {
int fx = find(x);
if (~val[fx]) return (rel[x] ^ val[fx]) == d;
val[fx] = rel[x] ^ d;
return true;
}
int query(int x) {
int fx = find(x);
if (~val[x]) return val[x];
return -;
}
} mfs; set<int> nsid;
int ns[N]; int main() {
// freopen("in", "r", stdin);
char buf[];
int n, m, val[], cnt, cas = ;
while (~scanf("%d%d", &n, &m) && (n || m)) {
mfs.init();
bool conf = false;
char *ptr;
cnt = ;
printf("Case %d:\n", cas++);
for (int q = ; q <= m; q++) {
scanf("%s", buf);
gets(buf + );
val[] = ;
ptr = strtok(buf + , " ");
while (ptr) {
val[]++;
sscanf(ptr, "%d", &val[val[]]);
ptr = strtok(NULL, " ");
}
if (conf) continue;
if (buf[] == 'I') {
cnt++;
if (val[] == ) conf = !mfs.merge(val[], val[], val[]);
else conf = !mfs.confirm(val[], val[]);
if (conf) printf("The first %d facts are conflicting.\n", cnt);
} else {
int ans = , tmp, fa;
nsid.clear();
for (int i = ; i <= val[]; i++) {
tmp = mfs.query(val[i]);
fa = mfs.find(val[i]);
// cout << tmp << ' ';
if (tmp < ) {
if (nsid.find(fa) != nsid.end()) {
ans ^= ns[fa] ^ mfs.rel[val[i]];
nsid.erase(fa);
} else {
nsid.insert(fa);
ns[mfs.fa[val[i]]] = mfs.rel[val[i]];
}
} else ans ^= tmp;
}
// cout << endl;
if (!nsid.empty()) puts("I don't know.");
else printf("%d\n", ans);
}
}
puts("");
}
return ;
}
——written by Lyon
hdu 3234 Exclusive-OR (并查集)的更多相关文章
- HDU 1811 拓扑排序 并查集
有n个成绩,给出m个分数间的相对大小关系,问是否合法,矛盾,不完全,其中即矛盾即不完全输出矛盾的. 相对大小的关系可以看成是一个指向的条件,如此一来很容易想到拓扑模型进行拓扑排序,每次检查当前入度为0 ...
- hdu 6200 mustedge mustedge(并查集+树状数组 或者 LCT 缩点)
hdu 6200 mustedge mustedge(并查集+树状数组 或者 LCT 缩点) 题意: 给一张无向连通图,有两种操作 1 u v 加一条边(u,v) 2 u v 计算u到v路径上桥的个数 ...
- <hdu - 1232> 畅通工程 并查集问题 (注意中的细节)
本题链接:http://acm.hdu.edu.cn/showproblem.php?pid=1232 结题思路:因为题目是汉语的,那我就不解释题意了,要求的是最少建设的道路,我们可以用并查集来做这 ...
- HDU 5441 Travel(并查集+统计节点个数)
http://acm.hdu.edu.cn/showproblem.php?pid=5441 题意:给出一个图,每条边有一个距离,现在有多个询问,每个询问有一个距离值d,对于每一个询问,计算出有多少点 ...
- HDU 4313 Matrix(并查集)
http://acm.hdu.edu.cn/showproblem.php?pid=4313 题意: 给出一棵树,每条边都有权值,其中有几个点是特殊点,现在破坏边还使得这几个特殊点互相不可达,需要使得 ...
- hdu 1558 (线段相交+并查集) Segment set
题目:http://acm.hdu.edu.cn/showproblem.php?pid=1558 题意是在坐标系中,当输入P(注意是大写,我当开始就wa成了小写)的时候输入一条线段的起点坐标和终点坐 ...
- HDU 3018 Ant Trip (并查集求连通块数+欧拉回路)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3018 题目大意:有n个点,m条边,人们希望走完所有的路,且每条道路只能走一遍.至少要将人们分成几组. ...
- hdu 1863 畅通工程 (并查集+最小生成树)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1863 畅通工程 Time Limit: 1000/1000 MS (Java/Others) M ...
- HDU 6109 数据分割 并查集,SET
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6109 题意:中文题面 解法:每次都贪心地尝试将尽量多的条件放进当前这组,遇到第一个与已有条件冲突时,就 ...
随机推荐
- idea中查看方法的调用链
Eclipse的"Call Hierarchy"可以查看一个Java方法或类成员变量的调用树(caller和callee两个方向),非常方便. 在IDEA中类似功能被划分到了三个 ...
- 页面PC端 / 移动端整屏纵向翻页,点击/触摸滑动效果功能代码非插件
页面翻页,滑动功能示范代码 <!DOCTYPE html> <html lang="en"> <head> <meta charset=& ...
- oracle习题-emp表查询练习
emp表查询练习 1 查询emp表的全部记录 Select * from emp; 2 查询出每个雇员的编号.姓名.基本工资 Select empno,ename,sal from emp; 3 查询 ...
- python利用Remove.bg接口自动去背景(转)
转 https://blog.csdn.net/Quentin_he/article/details/97569625 前段时间基友找我让帮忙把他的结婚登记照扣出来换一个背景当作简历照,好在我之前学过 ...
- Windows Phpstrom svn 配置
网上百度找到的解决方案行不通,就是下图两项都不选中.临时是可以的,但是到了第二天,又不行了. 以下是自己瞎弄的,居然可以了. 第一步:安装TortoiseSVN 1.8.* ,注意安装选项要选上com ...
- 第二周<导学/分类>
分类学习 分类算法各有不同 knn naivebyes regression dnn sklearn.linear_modlel 线性函数 sklearn.preprocessing 非线性函数 分类 ...
- HTTP请求响应头信息
HTTP请求响应头信息 请求:(request) 组成部分: 请求行 请求头 请求体 请求行:请求信息的第一行 格式:请求方式 访问的资源 协议/版本 例如:GET /day0801/1.html H ...
- Python re.sub函数
- HTML-DOM实例——实现带样式的表单验证
HTML样式 基于table标签来实现页面结构 <form id="form1"> <h2>增加管理员</h2> <table&g ...
- k8s 超详细总结,面试必问
一个目标:容器操作:两地三中心:四层服务发现:五种Pod共享资源:六个CNI常用插件:七层负载均衡:八种隔离维度:九个网络模型原则:十类IP地址:百级产品线:千级物理机:万级容器:相如无亿,K8s有亿 ...