Submission #398036

#TimeUsernameProblemLanguageResultExecution timeMemory
398036AmineWeslatiLove Polygon (BOI18_polygon)C++14
0 / 100
479 ms18296 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),adj[MX]; map<str,int>mp; vi vis(MX,0); int n=0; void dfs(int u){ vis[u]=1; n++; for(int v: adj[u]) if(!vis[v]) dfs(v); } 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]]++; adj[mp[s]].pb(mp[ss]); adj[mp[ss]].pb(mp[s]); } 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 int ans=0; FOR(i,0,N)if(!vis[i]){ n=0; dfs(i); ans+=(n+1)/2; } 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...