Submission #376085

#TimeUsernameProblemLanguageResultExecution timeMemory
376085eulerdesojaLove Polygon (BOI18_polygon)C++14
29 / 100
332 ms31596 KiB
#include<bits/stdc++.h>
#include<fstream>
using namespace std;

#define ll long long
#define pb push_back
#define sz(x) int(x.size())

typedef pair<int,int>ii;
typedef vector<int> vi;

void setIO(string s) {
  ios_base::sync_with_stdio(0); cin.tie(0); 
  freopen((s+".in").c_str(),"r",stdin);
  freopen((s+".out").c_str(),"w",stdout);
}
const int mxn=1e5+5;
int n,dp[mxn][2],root[mxn];
map<string,int>mp;
string love[mxn][2];
vi g[mxn];
bool v[mxn];

void dfs(int i,int p){
	int sum=0;
	int ma=0;
	for(int j:g[i])if(j!=p){
		dfs(j,i);
		sum+=dp[j][0];
		ma=max(ma,dp[j][1]-dp[j][0]);
	}
	dp[i][1]=1+sum;
	dp[i][0]=ma+sum;
}
int32_t main(){
	ios_base::sync_with_stdio(0);cin.tie(0);
	//setIO("sort");
	cin>>n;
	if(n&1){
		cout<<-1<<"\n";
		return 0;
	}
	for(int i=0;i<n;i++){
		cin>>love[i][0]>>love[i][1];
		mp[love[i][0]];
		mp[love[i][1]];
	}
	int T=0;
	for(auto it=mp.begin();it!=mp.end();it++){
		T++;
		it->second=T;
	}
	for(int i=0;i<n;i++){
		int x=mp[love[i][0]];
		int y=mp[love[i][1]];
		if(x==y){
			root[x]=1;
			continue;
		}
		g[y].pb(x);

	}
	int ans=0;
	for(int i=1;i<=n;i++){
		if(root[i]){
			//self-loop
			dfs(i,0);
			ans+=dp[i][0];
		}
	}
	cout<<n-ans<<"\n";

	return 0;
}

Compilation message (stderr)

polygon.cpp: In function 'void setIO(std::string)':
polygon.cpp:14:10: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)', declared with attribute warn_unused_result [-Wunused-result]
   14 |   freopen((s+".in").c_str(),"r",stdin);
      |   ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
polygon.cpp:15:10: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)', declared with attribute warn_unused_result [-Wunused-result]
   15 |   freopen((s+".out").c_str(),"w",stdout);
      |   ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...