Run ID 作者 问题 语言 测评结果 分数 时间 内存 代码长度 提交时间
34335 22级廖思学 【S】T2 C++ 解答错误 0 86 MS 5156 KB 1391 2024-11-06 08:40:02

Tests(0/10):


#include<bits/stdc++.h> using namespace std; const int N=5e5+10; int n,fa[N],rk[N],cnt; int find_root(int u){ if(fa[u]==u)return u; return fa[u]=find_root(u); } void merge(int x,int y){ // cout<<x<<" "<<y<<endl; if(fa[x]==fa[y])return; if(rk[x]>rk[y]){fa[y]=x;rk[x]++;} else {fa[x]=y;rk[y]++;} return; } int a[N],b[N],t[N]; map<int,int>mp; int main(){ //freopen("xor.in","r",stdin); cin>>n; for(int i=1;i<=n+1;i++)fa[i]=i; for(int i=1;i<=n;i++){cin>>a[i];a[n+1]^=a[i];t[i]=a[i];}t[n+1]=a[n+1]; for(int i=1;i<=n;i++){cin>>b[i];b[n+1]^=b[i];t[i+n+1]=b[i];}t[2*n+2]=b[n+1]; sort(t+1,t+2*n+3); int ct=0; for(int i=1;i<=2*n+2;i++){ if(t[i]!=t[i-1]||i==1)mp[t[i]]=++ct; // cout<<t[i]<<" "<<ct<<endl; } for(int i=1;i<=n+1;i++){ if(i==n+1){ if(fa[mp[a[i]]]!=mp[a[i]]||rk[mp[a[i]]]>0)continue; } if(a[i]!=b[i]){ merge(mp[a[i]],mp[b[i]]);cnt++; } } // cout<<cnt<<endl; for(int i=1;i<=n+1;i++){ if(fa[i]==i&&(a[i]!=b[i]))cnt++; // cout<<fa[i]<<" "; }//cout<<endl; // cout<<cnt<<endl; cnt--; sort(a+1,a+n+2);sort(b+1,b+n+2); for(int i=1;i<=n+1;i++){ if(a[i]!=b[i]){ cout<<-1<<endl;return 0; } } cout<<cnt<<endl; return 0; }


测评信息: