Submission #1298784

#TimeUsernameProblemLanguageResultExecution timeMemory
1298784nguyenkhangninh99Love Polygon (BOI18_polygon)C++20
54 / 100
150 ms17588 KiB
#include<bits/stdc++.h>
using namespace std;

#define int long long
const int maxn = 1e5 + 5;
vector<int> g[maxn];
signed main(){
    ios_base::sync_with_stdio(false);
    cin.tie(0); cout.tie(0);

    int n; cin >> n;
    int id = 1;
    map<string, int> mp;
    for(int i = 1; i <= n; i++){
        string s, t; cin >> s >> t;
        if(!mp.count(s)) mp[s] = id++;
        if(!mp.count(t)) mp[t] = id++;
        int u = mp[s], v = mp[t];
        g[u].push_back(v);
    }
    if(n & 1){
        cout << -1;
        return 0;
    } 

    vector<int> deg(n + 1), c2(n + 1), vis(n + 1), f(n + 1);
    for(int i = 1; i <= n; i++) if(g[i].size()) deg[g[i][0]]++;
        
    for(int i = 1; i <= n; i++){
        if(g[i].empty()) continue;
        int v = g[i][0];
        if(g[v].size() && g[v][0] == i && i != v) c2[i] = 1;
    }

    queue<int> q;
    for(int i = 1; i <= n; i++) if(!deg[i]) q.push(i);
    
    int kept = 0;
    while(q.size()){
        int u = q.front(); q.pop();
        int v = g[u][0];
        
        if(!vis[u]){
            if(!vis[v] && !c2[v] && u != v){
                vis[u] = 1; vis[v] = 1;
                kept++;
            }
        }
        deg[v]--;
        if(deg[v] == 0) q.push(v);
    }

    for(int i = 1; i <= n; i++){
        if(vis[i]) continue;
        
        if(c2[i]){ 
            int v = g[i][0];
            vis[i] = vis[v] = 1;
            kept += 2;
        }else{
            int cur = i, len = 0;
            while(!vis[cur]){
                vis[cur] = 1;
                len++;
                cur = g[cur][0];
            }
            kept += len / 2;
        }
    }
    cout << n - kept;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...