提交时间:2024-11-06 21:36:15
运行 ID: 34356
#include<bits/stdc++.h> using namespace std; long long n,a[100005],b[100005],xr,cnt,flag=1,ans; map<long long,long long>aa,bb,ls; long long fa[200005],sz[200005]; void init(){ for(int i=0;i<=200000;i++)fa[i]=i,sz[i]=1; } long long g(long long x){ if(x==fa[x])return x; return fa[x]=g(fa[x]); } void mg(long long x,long long y){ x=g(x),y=g(y); if(x!=y)fa[x]=y,sz[y]+=sz[x]; } int main(){ scanf("%lld",&n); for(int i=1;i<=n;i++)scanf("%lld",&a[i]),aa[a[i]]++,xr^=a[i]; for(int i=1;i<=n;i++)scanf("%lld",&b[i]),bb[b[i]]++; aa[xr]++; ans=n-1; for(int i=1;i<=n;i++){ if(!ls[a[i]])ls[a[i]]=++cnt; if(!ls[b[i]])ls[b[i]]=++cnt; } for(int i=1;i<=n;i++){ if(aa[b[i]]>bb[b[i]]){ printf("-1"); return 0; } } init(); long long flag=1; for(int i=1;i<=n;i++){ if(a[i]!=b[i]){ mg(ls[a[i]],ls[b[i]]); flag=0; } else ans--; } if(flag==1){ printf("0"); return 0; } for(int i=1;i<=n;i++){ if(fa[i]==i && sz[i]>1)ans++; } //if(g(xr)==a[n+1] || !aa[xr])ans++; printf("%lld",ans); }