Description

Input

Output

Sample Input

3 3 0
1 1 7
1 1 6
1 3 2

Sample Output

1
0
1
7
0
5

Data Constraint

Solution

  • 看到这种“真假条件”,首先要想到的就是——并查集

  • 设 F[x]F[x] 表示 xx 的祖先,G[x]G[x] 表示从 xx 到 xx 的祖先的异或和。

  • 注意:并集时编号大的要连到编号小的,这样方便处理区间;Get_Father 时顺便处理 G[x]G[x] 即可。

  • 那么对于读入的 l,r,kl,r,k ,先查找出 l−1l-1 和 rr 的祖先 flfl 和 frfr 。

  • 若 fl=frfl=fr ,则再判断 G[l−1] xor G[r]G[l-1]\ xor\ G[r] 是否等于 kk 即可,等于则为真,不等则为假。

  • 若 fl≠frfl≠fr ,将两集合合并,frfr 向 flfl 连一条 kk ,即:

    F[fr]=fl

    F[fr]=fl

    G[fr]=G[l−1] xor G[r] xor k

    G[fr]=G[l-1]\ xor\ G[r]\ xor\ k

  • 最后输出答案,则设 sum[i]sum[i] 表示从 11 到 ii 的异或和,且 sum[1]sum[1] 到 sum[i−1]sum[i-1] 都已求出了。

  • 于是显然,第 ii 为的答案就是 sum[i] xor sum[i−1]]sum[i]\ xor\ sum[i-1]] 。那怎么求出 sum[i]sum[i] 呢?

  • 当 ii 为一个集合的祖先时,说明 ii 的取值不受限制,取 00 显然最优,则:

    sum[i]=sum[i−1]

    sum[i]=sum[i-1]

  • 当 ii 不为一个集合的祖先,设其祖先为 jj ,那么 ii 这个点要填的就是 G[i]G[i] ,于是:

    sum[i]=sum[j] xor G[i]

    sum[i]=sum[j]\ xor\ G[i] 。

  • 这样的时间复杂度就是 O(M α(N))O(M\ α(N)) 。

Code

#include<cstdio>
#include<algorithm>
using namespace std;
const int N=200001;
int last;
int f[N],g[N],sum[N];
inline int read()
{int X=0,w=1; char ch=0;while(ch<'0' || ch>'9') {if(ch=='-') w=-1;ch=getchar();}while(ch>='0' && ch<='9') X=(X<<3)+(X<<1)+ch-'0',ch=getchar();return X*w;
}
inline void write(int x)
{if(x>9) write(x/10);putchar(x%10+'0');
}
inline int get(int x)
{if(f[x]==x) return x;int y=get(f[x]);g[x]^=g[f[x]];return f[x]=y;
}
int main()
{int n=read(),m=read(),czy=read();for(int i=1;i<=n;i++) f[i]=i;while(m--){int l=read(),r=read(),k=read();if(czy) l^=last,r^=last,k^=last;int f1=get(l-1),f2=get(r);if(f1!=f2){if(f1>f2) swap(f1,f2);f[f2]=f1;g[f2]^=g[l-1]^g[r]^k;write(last=1);}else write(last=(g[l-1]^g[r])==k);putchar('\n');}for(int i=1;i<=n;i++){int j=get(i);if(i==j) sum[i]=sum[i-1]; else sum[i]=sum[j]^g[i];write(sum[i]^sum[i-1]);putchar('\n');}return 0;
}

JZOJ 5373. 【NOIP2017提高A组模拟9.17】信仰是为了虚无之人相关推荐

  1. JZOJ 5372. 【NOIP2017提高A组模拟9.17】猫

    Description 信息组最近猫成灾了!隔壁物理组也拿猫没办法.信息组组长只好去请神刀手来帮他们消灭猫.信息组现在共有n 只猫(n 为正整数),编号为1 到n,站成了一个环,第i 只猫的左边是第i ...

  2. JZOJ 5371. 【NOIP2017提高A组模拟9.17】组合数问题

    Description 定义"组合数"S(n,m)代表将n 个不同的元素拆分成m 个非空集合的方案数.举个例子,将{1,2,3}拆分成2 个集合有({1},{2,3}),({2},{1,3}),({3 ...

  3. JZOJ 5392. 【NOIP2017提高A组模拟10.5】Lucky Transformation

    Description Input Output Sample Input 7 2 2343223 4 1 2234 Sample Output 2243233 2334 Data Constrain ...

  4. JZOJ 100047. 【NOIP2017提高A组模拟7.14】基因变异

    Description 21 世纪是生物学的世纪,以遗传与进化为代表的现代生物理论越来越多的 进入了我们的视野. 如同大家所熟知的,基因是遗传因子,它记录了生命的基本构造和性能. 因此生物进化与基因的 ...

  5. JZOJ 100041. 【NOIP2017提高A组模拟7.12】列车调度

    Description Input Output Sample Input Sample1: 3 1 2 3 Sample2: 9 1 3 2 4 8 6 9 5 7 Sample Output Sa ...

  6. JZOJ 100030. 【NOIP2017提高A组模拟7.8】为了爱情

    Description Input 输入文件第一行包含一个正整数 k.之后是 k 组测试用例. 每组测试用例的第一行为一个整数 n.接下来 n 行,每行 n 个以空格隔开的数,用来 描述棋盘的初始状态 ...

  7. JZOJ 100026. 【NOIP2017提高A组模拟7.7】图

    Description 有一个n个点n条边的有向图,每条边为< i,f(i),w(i)>,意思是i指向f(i)的边权为w(i)的边,现在小A想知道,对于每个点的si和mi. si:由i出发 ...

  8. JZOJ 5402. 【NOIP2017提高A组模拟10.8】God Knows

    Description Input Output Sample Input 5 3 1 4 5 2 3 4 3 4 1 Sample Output 5 Data Constraint Solution ...

  9. JZOJ 5405. 【NOIP2017提高A组模拟10.10】Permutation

    Description 你有一个长度为n 的排列P 与一个正整数K 你可以进行如下操作若干次使得排列的字典序尽量小 对于两个满足|i-j|>=K 且|Pi-Pj| = 1 的下标i 与j,交换P ...

最新文章

  1. P1217 回文质数(打表)
  2. 强迫症犯了,忍不住赞一下slf4j包Logger.java的优雅代码
  3. Nodejs 操作 MongoDb 数据库
  4. 01-05 Linux常用命令-性能统计
  5. asp.net写验证码
  6. 零基础java学习笔记
  7. 以梦为马,一路向前——我的2014
  8. OpenGL教程——windows安装openGL
  9. Coupled Layer-wise Graph Convolution for Transportation Demand Prediction
  10. 影响英语单词拼写的6大因素
  11. MATLAB数字图像处理(二)直方图
  12. 第一序列任小粟的能力_《第一序列》陈无敌刚烈正义,自封大圣,可任小粟做不得慈悲唐僧...
  13. 计算复杂性第八章——空间复杂性
  14. 6-1 插入法建立有序链表
  15. css动画和js动画比较!
  16. 男程序员用双手虐了多少女明星?
  17. 好用的word插件汇总
  18. 深入理解Arrays.sort()
  19. zed相机拆机_使用TX2+ZED相机运行ORBSLAM2和LearnVIORB
  20. Mixly2.0版本的Blinker库文件

热门文章

  1. Go 语言web 框架 Gin 练习 7
  2. windows 解决 Go下载包失败 设置代理
  3. 一个不错的shell 脚本教程 入门级
  4. 【转】理解小波消失矩
  5. C++编译链接的那些小事
  6. 学长毕业日记 :本科毕业论文写成博士论文的神操作20170408
  7. 【完结篇】专栏 | 基于 Jupyter 的特征工程手册:特征降维
  8. 干货 | 神经网络与深度学习精选文章汇总
  9. VTK修炼之道22:图像基本操作_彩色图像成分提取
  10. Linux中文件操作