제출 #718168

#제출 시각아이디문제언어결과실행 시간메모리
718168amirhoseinfar1385Love Polygon (BOI18_polygon)C++17
29 / 100
283 ms27620 KiB
#include<bits/stdc++.h> using namespace std; int main(){ ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n; cin>>n; map<string,int>mp; vector<int>cnt(n+1); vector<vector<int>>revadj(n+1); vector<pair<string,string>>all(n); for(int i=0;i<n;i++){ cin>>all[i].first>>all[i].second; mp[all[i].first]=i; } vector<int>adj(n+1); for(int i=0;i<n;i++){ int x=mp[all[i].second]; revadj[x].push_back(i); adj[i]=x; cnt[x]++; } if(n&1){ cout<<-1<<"\n"; return 0; } int res=n; set<pair<int,int>>st; for(int i=0;i<n;i++){ st.insert(make_pair(cnt[i],i)); } while((int)st.size()>0){ auto x=*st.begin(); st.erase(x); //cout<<x.second<<" "<<adj[x.second]<<'\n'; if(adj[x.second]==x.second){ continue; } res--; for(auto y:revadj[x.second]){ st.erase(make_pair(cnt[y],y)); } // cout<<x.second<<'\n'; st.erase(make_pair(cnt[adj[x.second]],adj[x.second])); if(st.count(make_pair(cnt[adj[adj[x.second]]],adj[adj[x.second]]))==1){ st.erase(make_pair(cnt[adj[adj[x.second]]],adj[adj[x.second]])); cnt[adj[adj[x.second]]]--; st.insert(make_pair(cnt[adj[adj[x.second]]],adj[adj[x.second]])); } for(auto y:revadj[adj[x.second]]){ st.erase(make_pair(cnt[y],y)); } } cout<<res<<'\n'; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...