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 题意:中文题面 解法:每次都贪心地尝试将尽量多的条件放进当前这组,遇到第一个与已有条件冲突时,就 ...
随机推荐
- 优化SQL之最快等价SQL
SQL优化工具Tosska SQL Tuning Expert for Oracle,帮助SQL开发人员解决SQL性能问题. 本工具主要创始人Richard To, 资深ITPUB元老,从1996年开 ...
- GYM 101981E(开关反转性质)
要点 做法是删去连续的k个0或k个1,连消.消消乐的那种,网上博主用个栈\(O(n)\)就很优秀地操作了这个过程 原因是有性质:比如k=3,101000贪心地翻就能翻成000101,所以连续的k个可以 ...
- 【CS Round #44 (Div. 2 only) A】Frequent Numbers
[链接]h在这里写链接 [题意] 在这里写题意 [题解] 大水题 [错的次数] 0 [反思] 在这了写反思 [代码] /* */ #include <cstdio> #include &l ...
- JavaScript--location.href的跳转
页面重载 true 强制从服务器加载 false 优先从缓存加载 window.location.reload(true); window.location.href.self.location. ...
- 机器学习之决策树(ID3)算法与Python实现
机器学习之决策树(ID3)算法与Python实现 机器学习中,决策树是一个预测模型:他代表的是对象属性与对象值之间的一种映射关系.树中每个节点表示某个对象,而每个分叉路径则代表的某个可能的属性值,而每 ...
- 注解2 --- 自定义 Annotation --- 技术搬运工(尚硅谷)
定义新的 Annotation 类型使用 @interface 关键字 自定义注解自动继承了java.lang.annotation.Annotation接口 Annotation 的成员变量在 An ...
- pillow模块
pillow模块 用于操作图片的模块 安装 pip install pillow 生成验证码 from PIL import Image,ImageDraw,ImageFont from io imp ...
- Python 正则表达式语法实例
- Leetcode762.Prime Number of Set Bits in Binary Representation二进制表示中质数个计算置位
给定两个整数 L 和 R ,找到闭区间 [L, R] 范围内,计算置位位数为质数的整数个数. (注意,计算置位代表二进制表示中1的个数.例如 21 的二进制表示 10101 有 3 个计算置位.还有, ...
- xcode自动完成代码 Code Snippet Library
今天发现Xcode里一个好东西:代码片段库 你可以将自己常用的代码放到里面,给它命名,设置快捷键,以后想用这段代码的时候只要按快捷键,就会出现提示,直接将这段代码显示出来,十分高效. 比如我经常会用到 ...