Submission #1299400

#TimeUsernameProblemLanguageResultExecution timeMemory
1299400harryleeeLove Polygon (BOI18_polygon)C++20
21 / 100
143 ms8928 KiB
#include<bits/stdc++.h> using namespace std; const int maxn = 1e5; int n, nxt[maxn + 1], vis[maxn + 1], in[maxn + 1], rep, res; vector<vector<int>> vec; bool in_cycle[maxn + 1], change[maxn + 1]; inline void input(){ map<string, int> mp; int dem = -1; cin >> n; for (int i = 1; i <= n; ++i){ string u, v; cin >> u >> v; if (mp.find(u) == mp.end()){ mp[u] = ++dem; } if (mp.find(v) == mp.end()){ mp[v] = ++dem; } nxt[mp[u]] = mp[v]; in[mp[v]]++; // cout << mp[u] << ' ' << mp[v] << '\n'; } return; } int main(){ // freopen("CHUNG.INP", "r", stdin); // freopen("TEST2.OUT", "w", stdout); ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); input(); if ((n % 2) != 0){ cout << -1; return 0; } vector<int> dp((1 << n), 2e9); dp[0] = 0; for (int mask = 1; mask < (1 << n); ++mask) if ((int)__builtin_popcount(mask) % 2 == 0){ int u = -1; for (int bit = n - 1; bit >= 0; --bit) if (mask & (1 << bit)){ u = bit; break; } for (int v = 0; v < u; ++v) if (mask & (1 << v)){ int cur = dp[(mask ^ (1 << u) ^ (1 << v))]; if (nxt[u] != v) cur++; if (nxt[v] != u) cur++; dp[mask] = min(dp[mask], cur); } } cout << dp[(1 << n) - 1] << '\n'; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...