Submission #1236598

#TimeUsernameProblemLanguageResultExecution timeMemory
1236598angelsLove Polygon (BOI18_polygon)C++20
25 / 100
246 ms9460 KiB
#include <bits/stdc++.h> using namespace std; void make_set(int p[], int sz[], int n) { for(int i=0; i<n; i++) { p[i]=i; sz[i]=1; } } int Find(int i, int p[]) { if(i==p[i]) return p[i]; return p[i]=Find(p[i], p); } void Union(int a, int b, int p[], int sz[]) { a=Find(a, p); b=Find(b, p); if(a==b) return; if(sz[a]<sz[b]) swap(a, b); sz[a]+=sz[b]; p[b]=p[a]; } int main() { int n; cin>>n; map<string, int>str_to_int; int graph[n]; int index=0; string aa, bb; int p[n], sz[n]; make_set(p, sz, n); for(int i=0; i<n; i++) { cin>>aa>>bb; if(str_to_int.find(aa)==str_to_int.end()) { str_to_int[aa]=index; index++; } if(str_to_int.find(bb)==str_to_int.end()) { str_to_int[bb]=index; index++; } graph[str_to_int[aa]]=str_to_int[bb]; Union(str_to_int[aa], str_to_int[bb], p, sz); } if(n%2==1) { cout<<-1; return 0; } bool vis[n]; memset(vis, 0, sizeof(vis)); int par; long long int sol=0; for(int i=0; i<n; i++) { par=Find(i, p); if(sz[par]==2) continue; if(!vis[par]) { sol+=(sz[par]+1)/2; vis[par]=1; } } cout<<sol; 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...