JZOJ5373. 【NOIP2017提高A组模拟9.17】信仰是为了虚无之人
2017-09-18 22:20
495 查看
题解
我们知道异或是满足前缀和的。那么,一个区间的异或和就可以变为两个数的异或值。
设si=a1 xor a2 xor … xor ai
al xor al+1 xor … xor ar=sl−1 xor sr
我们就用并采集维护,
设gi 表示i到其的祖先的异或和。
我们就依照某一段的异或和来维护并采集。
如果l-1,r在同一个集合里面,就判断他们的异或和是否为k,
如果不在同一个集合里面,那就将它们合并,
边权就使其满足异或和为k。
为了方便求出最后的答案,我们就将编号小的放在上面。
如果一个集合的祖先确定了,你们整个并采集里面的元素的数也就确定了,
因为要字典序最小,就使所以的祖先为0。
code
#include<queue> #include<cstdio> #include<iostream> #include<algorithm> #include <cstring> #include <string.h> #include <cmath> #include <math.h> #define ll long long #define N 200003 #define db double #define P putchar #define G getchar #define mo 1000000007 using namespace std; char ch; void read(int &n) { n=0; ch=G(); while((ch<'0' || ch>'9') && ch!='-')ch=G(); ll w=1; if(ch=='-')w=-1,ch=G(); while('0'<=ch && ch<='9')n=(n<<3)+(n<<1)+ch-'0',ch=G(); n*=w; } int max(int a,int b){return a>b?a:b;} int min(int a,int b){return a<b?a:b;} void write(int x) { if(x>9) write(x/10); P(x%10+'0'); } int f ,g ,sum ; int n,m,czy,last; int l,r,k,f1,f2; int get(int x) { if(f[x]!=x) { int t=get(f[x]); g[x]^=g[f[x]]; f[x]=t; } return f[x]; } int main() { freopen("sanae.in","r",stdin); freopen("sanae.out","w",stdout); read(n);read(m);read(czy); for(int i=1;i<=n;i++) f[i]=i; for(int i=1;i<=m;i++) { read(l);read(r);read(k); l=l^(last*czy); r=r^(last*czy); k=k^(last*czy); f1=get(l-1); f2=get(r); if(f1==f2) { if((g[l-1]^g[r])!=k)last=0;else last=1; } else { last=1; if(f2<f1)swap(f1,f2); f[f2]=f1;g[f2]^=k^g[l-1]^g[r]; } write(last),P('\n'); } for(int i=1;i<=n;i++) sum[i]=f[i]==i?sum[i-1]:sum[get(i)]^g[i]; for(int i=1;i<=n;i++) write(sum[i]^sum[i-1]),P('\n'); }
相关文章推荐
- JZOJ 5373. 【NOIP2017提高A组模拟9.17】信仰是为了虚无之人
- JZOJ5373. 【NOIP2017提高A组模拟9.17】信仰是为了虚无之人 并查集+启发式合并
- JZOJ5373【NOIP2017提高A组模拟9.17】信仰是为了虚无之人
- JZOJ 5371. 【NOIP2017提高A组模拟9.17】组合数问题
- JZOJ 100030. 【NOIP2017提高A组模拟7.8】为了爱情
- 【NOIP2017提高A组模拟9.17】信仰是为了虚无之人
- JZOJ5372. 【NOIP2017提高A组模拟9.17】猫 链表+贪心+堆优化
- JZOJ 5372. 【NOIP2017提高A组模拟9.17】猫
- JZOJ 4787 【NOIP2016提高A组模拟9.17】数格子
- JZOJ 5397. 【NOIP2017提高A组模拟10.6】Biology
- JZOJ5400. 【NOIP2017提高A组模拟10.7】Repulsed
- 【jzoj5359】【NOIP2017提高A组模拟9.12】【Arrays and Palindrome】
- 【JZOJ 5402】【NOIP2017提高A组模拟10.8】God Knows
- 【JZOJ 5405】【NOIP2017提高A组模拟10.10】Permutation
- jzoj5249 【NOIP2017提高A组模拟8.10】文本编辑器 (序列修改类问题,数据结构)
- JZOJ 5377. 【NOIP2017提高A组模拟9.19】开拓
- 【jzoj5286】【NOIP2017提高A组模拟8.16】【花花的森林 】【时间倒流】
- JZOJ 5305. 【NOIP2017提高A组模拟8.18】C (Standard IO)
- 【JZOJ4932】【NOIP2017提高组模拟12.24】B
- JZOJ5184. 【NOIP2017提高组模拟6.29】Gift