# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
909453 | shoryu386 | Love Polygon (BOI18_polygon) | C++17 | 268 ms | 23120 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
using namespace std;
#define MAX 200007
#define int long long
main(){
int n; cin >> n;
if (n % 2 == 1) {cout << -1; return 0;}
map<string, string> init;
map<string, int> indexed;
int adj[n];
for (int x = 0; x < n; x++){
string a, b; cin >> a >> b;
init[a] = b;
}
string name[n]; int ptr = 0;
for (auto y : init){
name[ptr] = y.first;
indexed[y.first] = ptr;
ptr++;
}
for (auto y : init){
adj[indexed[y.first]] = indexed[y.second];
}
bitset<MAX> taken;
int ans = 0;
for (int x = 0; x < n; x++){
if (adj[x] != x && x == adj[adj[x]]){
taken[x] = 1;
taken[adj[x]] = 1;
}
}
for (int x = 0; x < n; x++){
if (taken[adj[x]]) {adj[x] = x; continue;}
}
for (int x = 0; x < n; x++){
if (adj[x] == x) continue;
if (taken[x]) continue;
if (taken[adj[x]]) {adj[x] = x; continue;}
adj[adj[x]] = x;
ans++;
taken[x] = 1;
taken[adj[x]] = 1;
}
for (int x = 0; x < n; x++) if (!taken[x]) ans++;
cout << ans;
}
Compilation message (stderr)
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |