Submission #716509

#TimeUsernameProblemLanguageResultExecution timeMemory
716509ajab_01Love Polygon (BOI18_polygon)C++17
25 / 100
262 ms19064 KiB
#include<bits/stdc++.h>
using namespace std;

const int N = 1e5 + 5;
vector<int> g[N];
map<string , int> mp;
int ans , n , num , len;
bool deg[N] , vis[N] , ch = 1;

void dfs(int ver){
	vis[ver] = 1;
	len++;
	for(int i : g[ver]){
		if(vis[i]) continue;
		dfs(i);
	}
}

int main(){
	ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
	cin >> n;
	for(int i = 0 ; i < n ; i++){
		string a , b;
		cin >> a >> b;
		if(mp.find(a) == mp.end()) mp[a] = num++;
		if(mp.find(b) == mp.end()) mp[b] = num++;
		g[mp[a]].push_back(mp[b]);
		deg[mp[b]] = 1;
	}
	if(n & 1){
		cout << -1 << '\n';
		return 0;
	}

	for(int i = 0 ; i < n ; i++)
		ch &= deg[i];

	if(ch){
		for(int i = 0 ; i < n ; i++){
			if(vis[i]) continue;
			len = 0;
			dfs(i);
			if(len == 2) continue;
			ans += len / 2;
			if(len & 1) ans++;
		}
		cout << ans << '\n';
	}
	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...