Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
34331 | swzzzz | 【S】T2 | C++ | 通过 | 100 | 125 MS | 9732 KB | 1275 | 2024-11-06 08:14:28 |
#include<bits/stdc++.h> using namespace std; #define N 100005 int n,m; int a[N],b[N]; map<int,int>mp; int deg[N]; vector<int>to[N]; bool vis[N]; int cnt; void dfs(int x){ vis[x]=1; for(int i:to[x]) if(!vis[i]) dfs(i); } int main(){ cin>>n; for(int i=1;i<=n;i++){ cin>>a[i]; if(mp.find(a[i])==mp.end()) mp.insert(make_pair(a[i],mp.size()+1)); deg[mp[a[i]]]++; a[0]^=a[i]; } for(int i=1;i<=n;i++){ cin>>b[i]; if(mp.find(b[i])==mp.end()) mp.insert(make_pair(b[i],mp.size()+1)); deg[mp[b[i]]]--; b[0]^=b[i]; } if(mp.find(a[0])==mp.end()) mp.insert(make_pair(a[0],mp.size()+1)); deg[mp[a[0]]]++; for(pair<int,int>i:mp){ if(deg[i.second]<0){ cout<<-1; return 0; } } for(int i=1;i<=n;i++){ if(a[i]!=b[i]){ to[mp[a[i]]].push_back(mp[b[i]]); to[mp[b[i]]].push_back(mp[a[i]]); m++; } } for(int i=1;i<=mp.size();i++){ if(!vis[i] && !to[i].empty()){ cnt++; dfs(i); } } if(!to[mp[a[0]]].empty()){ cout<<m+cnt-1; }else{ cout<<m+cnt; } return 0; }