提交时间:2024-11-05 17:40:18

运行 ID: 34283

#include<bits/stdc++.h> using namespace std; int n; bool vis[200300]; int a[200300],b[200300],t[200300]; int f[200300]; inline int ff(int x){ return f[x]==x?x:f[x]=ff(f[x]); } inline void merge(int x,int y){f[ff(x)]=ff(y);} int main(){ ios::sync_with_stdio(0); cin.tie(0),cout.tie(0); // freopen("xor.in","r",stdin); // freopen("xor.out","w",stdout); cin>>n; int S=0; for(int i=1;i<=n;i++) cin>>a[i],S^=a[i],t[i]=a[i]; t[n+1]=S; for(int i=1;i<=n;i++) cin>>b[i],b[n+1]^=b[i]; sort(t+1,t+n+2);//666 auto tmp=unique(t+1,t+n+2); for(int i=1;i<=n;i++)a[i]=lower_bound(t+1,tmp,a[i])-t; for(int i=1;i<=n;i++)b[i]=lower_bound(t+1,tmp,b[i])-t; S=lower_bound(t+1,tmp,S)-t; for(int i=1;i<=n+1;i++) f[i]=i; int c=n; for(int i=1;i<=n;i++) if(a[i]==b[i])c--; else{ merge(a[i],b[i]); vis[a[i]]=vis[b[i]]=1; } vis[S]=1; c--; for(int i=1;i<=n+1;i++) if(vis[i]&&ff(i)==i)c++; cout<<c<<endl; return 0; }