Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
34320 | 沈仲恩 | 【S】T2 | C++ | 解答错误 | 50 | 39 MS | 8768 KB | 1192 | 2024-11-05 21:32:26 |
#include <bits/stdc++.h> #define int long long using namespace std; int fa[100005], sz[100005], a[100005], b[100005], sum; unordered_map<int, int> mp, id; inline int find(int x) { return fa[x] != x ? fa[x] = find(fa[x]) : x; } inline void mg(int x, int y) { x = find(x), y = find(y), fa[find(x)] = find(y), sz[x] += y; } signed main() { int n; scanf("%lld", &n); for (int i = 1; i <= n; i++) { scanf("%lld", &a[i]); fa[i] = i, mp[a[i]]++, sum ^= a[i]; } for (int i = 1; i <= n; i++) { scanf("%lld", &b[i]); mp[b[i]]--; } mp[sum]++; int cnt = 0; for (auto p : mp) { if (p.second < 0) { puts("-1"); return 0; } id[p.first] = ++cnt; } int ans = 0; for (int i = 1; i <= n; i++) { if (a[i] == b[i]) continue; mg(id[a[i]], id[b[i]]); ans++; } mp.clear(); for (int i = 1; i <= cnt; i++) if (sz[find(i)] > 1) mp[find(i)]++; if (sz[find(sum)] > 1) ans--; printf("%lld", ans + mp.size()); return 0; }