【NOIP2017提高A组模拟9.17】信仰是为了虚无之人

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

题解

判断真假考虑并查集,设\(g[i]\)表示从当前这棵树的根到\(i\)的前缀异或值,那么对于当前这个区间,\(l-1\)和\(r\)讨论

设\(f1\)是\(l-1\)的根,\(f2\)是\(r\)的根

  • 如果\(f1=f2\),说明是同一棵树,那么只有\(k=g[r]\ xor\ g[l-1]\)成立的时候才是真
  • 如果\(f1!=f2\),肯定是真,然后考虑合两棵树并,把\(f1\)和\(f2\)里较大的接到较小的,然后\(g[f2]=g[f2]\ xor\ g[l-1]\ xor\ g[r]\ xor\ k\),因为要使接上去之后异或值是\(k\)

在并查集\(find\)的时候同时更新\(g[i]\)

设\(s[i]\)表示\(1\)~\(i-1\)的最小异或值

求最小值时,如果当前这个点是祖先,说明这个点的取值没有限制,自然取0最优:\(s[i]=s[i-1]\)。如果不是祖先,那么这个点要填的就是\(g[i]\),\(s[i]=s[find(i)]^\ xor\ g[i]\)

输出\(s[i]\ xor\ s[i-1]\)

Code

#include<cstdio>
#include<algorithm>
using namespace std;
int n,m,pd,l,r,k,last,f1,f2,x,f[200001],g[200001],sum[200001];
int read()
{
int res=0,fh=1;char ch=getchar();
while ((ch<'0'||ch>'9')&&ch!='-') ch=getchar();
if (ch=='-') fh=-1,ch=getchar();
while (ch>='0'&&ch<='9') res=(res<<1)+(res<<3)+(ch-'0'),ch=getchar();
return res*fh;
}
int find(int x)
{
if (f[x]==x) return x;
int xx=find(f[x]);
g[x]^=g[f[x]];
return f[x]=xx;
}
int main()
{
freopen("sanae.in","r",stdin);
freopen("sanae.out","w",stdout);
n=read();m=read();pd=read();
for (int i=1;i<=n;++i)
f[i]=i;
while (m--)
{
l=read();r=read();k=read();
if (pd) l^=last,r^=last,k^=last;
f1=find(l-1);f2=find(r);
if (f1==f2)
{
if ((g[l-1]^g[r])==k) last=1;
else last=0;
printf("%d\n",last);
}
else
{
if (f1>f2) swap(f1,f2);
f[f2]=f1;
g[f2]^=g[l-1]^g[r]^k;
last=1;
printf("%d\n",last);
}
}
for (int i=1;i<=n;++i)
{
x=find(i);
if (i==x) sum[i]=sum[i-1];
else sum[i]=sum[x]^g[i];
printf("%d\n",sum[i]^sum[i-1]);
}
fclose(stdin);
fclose(stdout);
return 0;
}

【NOIP2017提高A组模拟9.17】信仰是为了虚无之人的更多相关文章

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

    [NOIP2017提高A组模拟9.17]猫 题目 Description 信息组最近猫成灾了! 隔壁物理组也拿猫没办法. 信息组组长只好去请神刀手来帮他们消灭猫.信息组现在共有n 只猫(n 为正整数) ...

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

    [NOIP2017提高A组模拟9.17]组合数问题 题目 Description 定义"组合数"S(n,m)代表将n 个不同的元素拆分成m 个非空集合的方案数. 举个例子,将{1,2,3}拆分成2 个 ...

  3. JZOJ5373【NOIP2017提高A组模拟9.17】信仰是为了虚无之人

    题目 分析 我们发现,如果[l,r]的异或和为k是真要求,有且仅当不存在[l,i]和[i,r]两个区间的异或和不为k. 我们用带权并查集了维护这些,但是,由于区间不连续,我们将点权移到边上,对于区间[ ...

  4. JZOJ 100029. 【NOIP2017提高A组模拟7.8】陪审团

    100029. [NOIP2017提高A组模拟7.8]陪审团 Time Limits: 1000 ms  Memory Limits: 131072 KB  Detailed Limits   Got ...

  5. JZOJ 5328. 【NOIP2017提高A组模拟8.22】世界线

    5328. [NOIP2017提高A组模拟8.22]世界线 (File IO): input:worldline.in output:worldline.out Time Limits: 1500 m ...

  6. JZOJ 5329. 【NOIP2017提高A组模拟8.22】时间机器

    5329. [NOIP2017提高A组模拟8.22]时间机器 (File IO): input:machine.in output:machine.out Time Limits: 2000 ms M ...

  7. JZOJ 5307. 【NOIP2017提高A组模拟8.18】偷窃 (Standard IO)

    5307. [NOIP2017提高A组模拟8.18]偷窃 (Standard IO) Time Limits: 1000 ms Memory Limits: 262144 KB Description ...

  8. JZOJ 5286. 【NOIP2017提高A组模拟8.16】花花的森林 (Standard IO)

    5286. [NOIP2017提高A组模拟8.16]花花的森林 (Standard IO) Time Limits: 1000 ms Memory Limits: 131072 KB Descript ...

  9. JZOJ 5305. 【NOIP2017提高A组模拟8.18】C (Standard IO)

    5305. [NOIP2017提高A组模拟8.18]C (Standard IO) Time Limits: 1000 ms Memory Limits: 131072 KB Description ...

随机推荐

  1. 《Clojure编程》笔记 第4章 多线程和并发

    目录 背景简述 第4章 多线程和并发 4.0 我的问题 4.1 术语 4.1.1 一个必须要先确定的思考基础 4.2 计算在时间和空间内的转换 4.2.1 delay 4.2.2 future 4.2 ...

  2. [CF160D]Edges in MST (最小生成树+LCA+差分)

    待填坑 Code //CF160D Edges in MST //Apr,4th,2018 //树上差分+LCA+MST #include<cstdio> #include<iost ...

  3. JVM学习(五) -执行子系统

    虚拟机和物理机的区别.两种都有代码执行能力.物理机的执行引擎是建立在处理器.硬件.指令集和操作系统上.而虚拟机的执行引擎是有自己实现的.因此可以自行的制定指令集和执行引擎的结构关系. 个人理解:分为三 ...

  4. 《Web接口开发与自动化测试》学习笔记(一)

    一.Django的入门 学习思路:先安装Django,然后在建立一个项目,接着运行这个项目,最后修改一下这个项目的数据,学习一下Django的原理之类的. 1.安装Django $pip instal ...

  5. MapReduce在Shuffle阶段按Mapper输出的Value进行排序

    ZKe ----------------- 在MapReduce框架中,Mapper的输出在Shuffle阶段,根据Key值分组之后,还将会根据Key值进行排序,因此Reducer的输出我们看到的结果 ...

  6. 鸿蒙之后,小米 Vela 也来了,下一代物联网平台应该是什么?

    1. 华为鸿蒙基于jerryscript构建物联网应用框架 2020年9月10日 鸿蒙OS 1.0 正式版发布,面向物联网领域,鸿蒙推出了类web开发架构ACE JS = LiteOS + jerry ...

  7. 【java】校验当前时间是否在规定的时间内

    废话不多说直接贴代码. 我的日期格式是 8:00-22:00 要用的自己换下格式哈. public class CheckClosingTimeUtil { /** * 校验当前时间是否在规定时间内 ...

  8. 【故障公告】博客站点再次出现故障,最终回退 .NET 5.0 恢复正常

    自从博客系统升级 .NET 5.0 之后遇到的诡异故障(一.二.三.四),今天它又出现了,就在前天刚刚故障之后, 就在昨天 .NET 5.0 正式版刚刚发布之后,出现了. 今天晚上我们在 19:30 ...

  9. 微软.net installer源码解析

    微软源码地址  dotnet/install-scripts/blob/master/src/dotnet-install.ps1 代码    [string]$AzureFeed="htt ...

  10. java里split(" {1,}")什么意思啊?

    将字符串按照括号内的内容分割成字符数组这里括号内是正则表达式,X{m,n}代表X至少重复m次,至多重复n次这里空格至少重复1次,就是将字符串以一个或多个空格分割如"1 2 ab c" ...