提交时间:2024-11-05 21:03:35

运行 ID: 34314

#include<bits/stdc++.h> using namespace std; #define int long long int read(){int x=0,f=1;char c=getchar();while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}while(c>='0'&&c<='9')x=x*10+c-'0',c=getchar();return x*f;} const int MAXN=300010; int n,m,ans,a[MAXN],b[MAXN],p[MAXN],A[MAXN],B[MAXN],fa[MAXN],siz[MAXN]; int fid(int x){return fa[x]==x?x:fa[x]=fid(fa[x]);} void mrge(int x,int y){ int u=fid(x),v=fid(y); if(u!=v){ fa[u]=v; siz[v]+=siz[u]; } } map<int,int>mp; void slv(){ n=read(); for(int i=1;i<=n;i++)a[n+1]^=a[i]=read(); for(int i=1;i<=n;i++)b[n+1]^=b[i]=read(); n++; for(int i=1;i<=n;i++)A[i]=a[i],B[i]=b[i]; sort(A+1,A+n+1),sort(B+1,B+n+1); for(int i=1;i<=n;i++)if(A[i]!=B[i]){ printf("-1"); return; } for(int i=1;i<=n;i++)p[i]=a[i],p[i+n]=b[i]; sort(p+1,p+2*n+1); m=unique(p+1,p+2*n+1)-p-1; for(int i=1;i<=m;i++)mp[p[i]]=i,siz[i]=1,fa[i]=i; for(int i=1;i<=n;i++)a[i]=mp[a[i]],b[i]=mp[b[i]]; for(int i=1;i<=n;i++){ if(a[i]!=b[i]){ mrge(a[i],b[i]); if(i!=n)ans++; } } for(int i=1;i<=n;i++){ if(siz[fid(a[i])]!=1){ if(fid(a[i])!=fid(a[n])){ ans++; mrge(a[i],a[n]); } } } printf("%lld",ans); } signed main(){ slv(); return 0; }