Run ID 作者 问题 语言 测评结果 分数 时间 内存 代码长度 提交时间
34318 沈仲恩 【S】T2 C++ 解答错误 50 43 MS 8772 KB 1178 2024-11-05 21:29:51

Tests(5/10):


#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]; } mp[sum]++; for (int i = 1; i <= n; i++) { scanf("%lld", &b[i]); mp[b[i]]--; if (mp[b[i]] < 0) { puts("-1"); return 0; } } int cnt = 0; for (auto p : mp) 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; }


测评信息: