比赛 20170912 评测结果 AAAAAAAAAA
题目名称 平凡的测试数据 最终得分 100
用户昵称 Ostmbh 运行时间 0.680 s
代码语言 C++ 内存使用 7.94 MiB
提交时间 2017-09-12 20:37:21
显示代码纯文本
  1. #include <iostream>
  2. #include <cstdio>
  3. #include <cstring>
  4. using namespace std;
  5. const int maxn=500000+10;
  6. int fa[maxn];
  7. int v[maxn];
  8. int d[maxn];
  9. int top[maxn];
  10. inline int find(int x){
  11. if(x==fa[x])
  12. return x;
  13. else {
  14. int u=fa[x];
  15. int p=find(u);
  16. if(p!=u){
  17. v[x]=v[u]^v[x];
  18. v[x]^=d[u];
  19. fa[x]=p;
  20. }
  21. return fa[x];
  22. }
  23. }
  24. int main(){
  25. freopen("td.in","r",stdin);
  26. freopen("td.out","w",stdout);
  27. int n,m;
  28. scanf("%d %d",&n,&m);
  29. for(int i=1;i<=n;i++)
  30. scanf("%d",&d[i]);
  31. for(int i=1;i<=n;i++)
  32. v[i]=d[i];
  33. for(int i=1;i<=n;i++)
  34. fa[i]=i;
  35. int opt,x,y;
  36. for(int i=1;i<=m;i++){
  37. scanf("%d",&opt);
  38. if(opt==1){
  39. scanf("%d %d",&x,&y);
  40. int fy=find(y);
  41. v[x]=d[x]^v[y];
  42. fa[x]=fy;
  43. }
  44. else {
  45. scanf("%d",&x);
  46. find(x);
  47. printf("%d\n",v[x]);
  48. }
  49. }
  50. return 0;
  51. }