【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;
}

最新文章

  1. 如何在一个div标签里显示出另一个网页? &lt;iframe src=&quot; http://www.baidu.com &quot; width=&quot;800px&quot; height=&quot;200px&quot; scrolling=&quot;no&quot; frameborder=&quot;0&quot;&gt; &lt;/iframe&gt;
  2. 为什么springMVC和Mybatis逐渐流行起来了?
  3. SQLServer日志无法收缩原因分析及解决
  4. 【原创】MYSQL++源码剖析&mdash;&mdash;前言与目录
  5. 20145215实验四 Android开发基础
  6. 理解javascript中的原型模式
  7. CSS概述&lt;选择器总结&gt;
  8. 节点属性(DOM对象)
  9. vhd镜像格式及vhd-util工具应用
  10. android入门——BroadCast(2)
  11. Bash中的变量
  12. centos7安装nodejs
  13. Vue.js 入门
  14. Asp.net core 2.0.1 Razor 的使用学习笔记(四)
  15. zookeeper分布式服务中选主的应用
  16. location-alias
  17. vue自制switch滑块
  18. ZOJ 4019 Schr&#246;dinger&#39;s Knapsack
  19. 修饰词public、private、protected、默认、四者之间的区别
  20. Flink KAFKA

热门文章

  1. Docker(6)- docker info 命令详解
  2. [开源] .Net 使用 ORM 访问 华为GaussDB数据库
  3. CF1320C World of Darkraft: Battle for Azathoth
  4. 没有磁盘空间 No space left on device
  5. learning to Estimate 3D Hand Pose from Single RGB Images论文理解
  6. yum安装报睡眠错误的解决方法
  7. php之策略模式
  8. GraphX 在图数据库 Nebula Graph 的图计算实践
  9. EFCore自己用的点东西
  10. Chrome默认启动尺寸的小问题