Submission #398031

#TimeUsernameProblemLanguageResultExecution timeMemory
398031AmineWeslatiLove Polygon (BOI18_polygon)C++14
0 / 100
348 ms10872 KiB
#include "bits/stdc++.h" using namespace std; typedef long long ll; typedef vector<int>vi; #define pb push_back #define sz(v) (int)v.size() typedef string str; #define FOR(i,a,b) for(int i=a; i<b; i++) void IO(){ #ifdef LOCAL freopen("input.txt","r",stdin); freopen("output.txt","w",stdout); #endif } //------------------------------------------------------// void ckmin(int &x, int y){x=min(x,y);} const int MX=2e5; int N; vi out(MX),in(MX,0); map<str,int>mp; int main(){ IO(); cin>>N; int cnt=0; FOR(i,0,N){ str s,ss; cin>>s>>ss; if(!mp.count(s)) mp[s]=cnt++; if(!mp.count(ss)) mp[ss]=cnt++; out[mp[s]]=mp[ss]; in[mp[ss]]++; } if(N&1){ cout << -1 << endl; return 0; } //Sub2 /*vi vis(N,0); int ans=0; FOR(i,0,N){ int n=0,cur=i; while(!vis[cur]){ vis[cur]=1; n++; cur=out[cur]; } if(n!=2) ans+=(n+1)/2; } cout << ans << endl;*/ //Sub3 set<int>s; int ans=0; FOR(i,0,N) if(in[i]==0) s.insert(i); while(sz(s)){ auto it=s.begin(); int u=*it; s.erase(it); in[out[out[u]]]--; if(in[out[out[u]]]==0) s.insert(out[out[u]]); out[out[u]]=u; ans++; } cout << ans << endl; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...