Submission #1298581

#TimeUsernameProblemLanguageResultExecution timeMemory
1298581HuyATLove Polygon (BOI18_polygon)C++20
29 / 100
156 ms21516 KiB
#include<bits/stdc++.h> #define newl '\n' const int N = 1e5 + 10; const int V = 1e7 + 10; const long long INF = 1e18; const long long M = 1e9 + 7; struct Solver{ int n,id; std::vector<bool> match; std::vector<std::vector<int>> adj; std::map<std::string,int> m; std::vector<int> par,vis; int get(std::string str){ if(m[str] == 0){ m[str] = ++id; } return m[str]; } Solver() : id(0){ } void readData(){ std::cin >> n; adj.resize(n + 1); par.assign(n + 1,0); vis.assign(n + 1,0); match.assign(n + 1,0); for(int i = 1;i <= n;++i){ std::string su,sv; std::cin >> su >> sv; int u = get(su); int v = get(sv); par[u] = v; adj[par[u]].emplace_back(u); // std::cout << u << " " << v << newl; } } void dfs(int u){ vis[u] = true; for(int v : adj[u]){ if(vis[v] || v == u){ continue; } dfs(v); if(!match[v] && !match[u]){ match[u] = match[v] = true; } } } void solve(){ if(n & 1){ std::cout << -1; return; } for(int i = 1;i <= n;++i){ if(i == par[i]){ dfs(i); } } int ans = 0; for(int i = 1;i <= n;++i){ ans += match[i]; // std::cout << match[i] << " "; } ans /= 2; for(int i = 1;i <= n;++i){ ans += !match[i]; // std::cout << match[i] << " "; } // for(int i = 1;i <= n;++i){ // ans -= (par[par[i]] == i && i < par[i]); // } std::cout << ans; } void main(){ readData(); solve(); } }; int main(){ std::ios_base::sync_with_stdio(false); std::cin.tie(nullptr);std::cout.tie(nullptr); Solver().main(); 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...