Problem - 3234

  题意不难理解,就是给出一些断言,以及一些查询,回答查询或者在找到断言矛盾以后沉默不做任何事。

  这题其实就是一个并查集的距离存储问题,只要记录并查集元素的相对值以及绝对值就可以了。

代码如下:

 #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 (并查集)的更多相关文章

  1. HDU 1811 拓扑排序 并查集

    有n个成绩,给出m个分数间的相对大小关系,问是否合法,矛盾,不完全,其中即矛盾即不完全输出矛盾的. 相对大小的关系可以看成是一个指向的条件,如此一来很容易想到拓扑模型进行拓扑排序,每次检查当前入度为0 ...

  2. hdu 6200 mustedge mustedge(并查集+树状数组 或者 LCT 缩点)

    hdu 6200 mustedge mustedge(并查集+树状数组 或者 LCT 缩点) 题意: 给一张无向连通图,有两种操作 1 u v 加一条边(u,v) 2 u v 计算u到v路径上桥的个数 ...

  3. <hdu - 1232> 畅通工程 并查集问题 (注意中的细节)

    本题链接:http://acm.hdu.edu.cn/showproblem.php?pid=1232  结题思路:因为题目是汉语的,那我就不解释题意了,要求的是最少建设的道路,我们可以用并查集来做这 ...

  4. HDU 5441 Travel(并查集+统计节点个数)

    http://acm.hdu.edu.cn/showproblem.php?pid=5441 题意:给出一个图,每条边有一个距离,现在有多个询问,每个询问有一个距离值d,对于每一个询问,计算出有多少点 ...

  5. HDU 4313 Matrix(并查集)

    http://acm.hdu.edu.cn/showproblem.php?pid=4313 题意: 给出一棵树,每条边都有权值,其中有几个点是特殊点,现在破坏边还使得这几个特殊点互相不可达,需要使得 ...

  6. hdu 1558 (线段相交+并查集) Segment set

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=1558 题意是在坐标系中,当输入P(注意是大写,我当开始就wa成了小写)的时候输入一条线段的起点坐标和终点坐 ...

  7. HDU 3018 Ant Trip (并查集求连通块数+欧拉回路)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3018 题目大意:有n个点,m条边,人们希望走完所有的路,且每条道路只能走一遍.至少要将人们分成几组. ...

  8. hdu 1863 畅通工程 (并查集+最小生成树)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1863 畅通工程 Time Limit: 1000/1000 MS (Java/Others)    M ...

  9. HDU 6109 数据分割 并查集,SET

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6109 题意:中文题面 解法:每次都贪心地尝试将尽量多的条件放进当前这组,遇到第一个与已有条件冲突时,就 ...

随机推荐

  1. swagger暴露程序接口文档

    Swagger2是一个帮助用户.团队.企业快速.高效.准确地生产API服务的工具组件,同时还提供了部分测试功能,它的官方网站是https://swagger.io/. 1.引入Maven <de ...

  2. centos部分网站无法访问问题的解决

    CentOS 5内核对TCP的读缓冲区大小有缺省设置,缺省为:net.ipv4.tcp_rmem = 4096 87380 4194304 解决办法就是将最后一个数字改小一点,具体操作就是在文件/et ...

  3. DataIntputStream / DataOutputStream 类

    1. DataInputStream类(熟悉)   (1)基本概念 java.io.DataInputStream类用于读取java中的基本数据类型.   (2)常用的方法 DataInputStre ...

  4. 继续对dubbo源代码进行maven builder

    版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/enson16855/article/details/32073981 原文地址:http://dtb ...

  5. 订阅 如何在IntelliJ IDEA中使用.ignore插件忽略不必要提交的文件

    如何在IntelliJ IDEA中使用.ignore插件忽略不必要提交的文件 标签: idea git 插件 分类: Git 最近初学Git,而且在使用的IDE是IntelliJ IDEA,发现IDE ...

  6. React项目动态设置title标题

    在React搭建的SPA项目中页面的title是直接写在入口index.html中,当路由在切换不用页面时,title是不会动态变化的.那么怎么让title随着路由的切换动态变化呢?1.在定义路由时增 ...

  7. ios开发ARC,IBOutlets之strong与weak

    今天在写程序的时候,用IBOutlets连了一个自定义的控件,出现了问题,后面访问的时候,控件里有些subviews没有初始化好,取到的时候为nil, 程序里用了ARC, IBOutlets一连接上, ...

  8. date、cal和clear命令

    一.date命令 date命令的功能:date命令是显示或设置系统时间与日期. 很多shell脚本里面需要打印不同格式的时间或日期,以及要根据时间和日期执行操作.延时通常用于脚本执行过程中提供一段等待 ...

  9. 【JZOJ4964】【GDKOI2017模拟1.21】Rhyme

    hafy 由于多次交换邮票没有满足所有人的需求,小Z被赶出了集邮部.无处可去的小Z决定加入音乐部,为了让音乐部的人注意到自己的才华,小Z想写一首曲子.为了让自己的曲子更好听,小Z找到了一些好听曲子作为 ...

  10. docker-compose进入容器出现unable to find user root: no matching entries in passwd file

    解决办法: 先docker-compose stop 容器,再docker-compose start 容器.虽然这样可以很快 解决问题,但并非长久之计.