Submission #1265970

#TimeUsernameProblemLanguageResultExecution timeMemory
1265970namhhLogičari (COCI21_logicari)C++20
110 / 110
54 ms19784 KiB
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define pii pair<int,int>
#define fi first
#define se second
const int N = 1e5+5;
int n,dp[N][6],par[N],ck = 0;
vector<int>adj[N];
pii du;
void init(){
	for(int i = 1; i <= n; i++) par[i] = i;
}
int find(int u){
	if(u == par[u]) return u;
	return par[u] = find(par[u]);
}
void join(int u, int v){
	u = find(u);
	v = find(v);
	par[v] = u;
}
void dfs(int u, int p){
	int sum1 = 0;
	int sum2 = 0;
	int mn1 = 1e9;
	int mn2 = 1e9;
	for(int v: adj[u]){
		if(v != p){
			dfs(v,u);
			sum1 += min(dp[v][0],dp[v][4]);
			sum2 += dp[v][1];
			mn1 = min(mn1,min(dp[v][2],dp[v][5])-min(dp[v][0],dp[v][4])); 
			mn2 = min(mn2,dp[v][3]-dp[v][1]); 
		}
	}
	dp[u][0] = sum1+mn1;
	dp[u][1] = sum1;
	dp[u][2] = sum2+mn2+1;
	dp[u][3] = sum2+1;
	if(ck == 0){
	    if(u == du.fi || u == du.se) dp[u][2] = dp[u][3] = 1e9;
	}
	else if(ck == 1){
		if(u == du.fi) dp[u][0] = dp[u][1] = 1e9;
		if(u == du.se){
			dp[u][0] = dp[u][1] = dp[u][2] = dp[u][3] = 1e9;
			dp[u][4] = sum1;
		}
	}
	else if(ck == 2){
		if(u == du.se) dp[u][0] = dp[u][1] = 1e9;
		if(u == du.fi){
			dp[u][0] = dp[u][1] = dp[u][2] = dp[u][3] = 1e9;
			dp[u][4] = sum1;
		}
	}
	else{
		if(u == du.fi || u == du.se){
			dp[u][0] = dp[u][1] = dp[u][2] = dp[u][3] = 1e9;
			dp[u][5] = sum2+1;
		}
	}
}
signed main(){
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	cin >> n;
	init();
	for(int i = 1; i <= n; i++){
		int u,v;
		cin >> u >> v;
		if(find(u) != find(v)){
			join(u,v);
			adj[u].push_back(v);
			adj[v].push_back(u);
		}
		else du = {u,v};
	}
	int ans = 1e9;
	for(int t = 0; t < 4; t++){
		ck = t;
	    for(int i = 1; i <= n; i++){
		    for(int j = 0; j <= 5; j++) dp[i][j] = 1e9;
	    }
	    dfs(1,0);
	    ans = min({ans,dp[1][0],dp[1][2],dp[1][4],dp[1][5]});
	}
	if(ans > n) cout << -1;
	else cout << ans;
}
//-----+--+----+-==-=*==--=+----------==----------------+=-----==-=+-==----------------
//---===+=----+=----=*=+=*+----------==-----------+=-----==-----==--+-+----------------
//---+=**=-=+---------***+----=------=-------------=-------+-----==-+--=---------------
//----*+-+++**++------=#+----===-----=-------------=-------==-----+-=+=-+--------------
//----++#***+*+++-----=+-----=-=----+---------------+-------+=-----*=-==-+-------------
//---+=+**++**++++==++*=-----===----+---------------+----=---=-----=*+*=-==------------
//---++**==+--++++++***-----+-+-----+---------------==---==--==-----+**---+------------
//----++*#=-+++***+***------+-+-----+----------------=----+---*+=---=*#=-=-+-----------
//-----=**+++*+++**%++-----=--+-----+----------------=----*=--==+==++***-=+==----------
//-------**#**++*%%@==-----=--+-----+-------------=+++++=-+=---+=+=-=+**--+++----------
//---------====+@@%@-=-----+--+--=+++++--------------=----+==--===---+*---+==+---------
//-----------=@*%%%%-=-----+=-==-----=---------------=----+--=-==+-=-=*----++==--------
//----------%#=%=#%%==-----=+--=-----=---------------+----+--===*=*==**=---+-++--------
//--------+@++@=*@%*-=-----=+=-=-----==-------------++-*%%%***=++-+=-+-+---=-===-------
//-------#%-=%=+@%@+-=-----=+=--+++*==*=------------**@*##%*--=-+-----=+---==-+==------
//------=%+-=%=%*@@--=-----=*#*=+*###@%*---------=+*++%***##=-+-+------+---==-=+=------
//-------%*-=%@+@@+-*=-----+-=--@##*##=+==----------=-#*#***-==-+------+---==--++------
//-------+@=+@@*@*-=-=-----=-==-*#%*##=----------------++=+=----+------+---==--==+-----
//--------%@@%%@*=--+=-----=---+=+#==*-------------------==-----+------+---==---=+-----
//----------%+=#-=--==-----+-------===--------------------------*------+---==---+==----
//---------##-%+-=---=-----++----------------------------------=*------=---==---=+=----
//--------=#-*@=-=---=-----**=----------------=----------------+*------=---==----++----
//-------=@==%*-==---=-----++*---------------------------------*+------+---==----++=---
//------=%*-=@--==---=-----+++*-------------------------------**=------+---==----==+---
//------*#--##--==---=-----+++*+--------------------+--------+**=------+---=-----==+---
//-----=@=--@*---=---=-----+++#+*=--------=+=----=+=-------=#+**-------+---+-----==+---
//----=%+--=@+---=---=-----=+**++**=---------------------=*+****------==---+-----===---
//----*#---*@=---=--==-----=*+#++*+++*=---------------=*#*++#+*+==----+==-+=-----====--
//---=@=---%%----=--=+-----=*+#++*++++***+----------*****+++#**++-----+==-+-------===--
//---%#----%%---==--=+------*+*++*++**+***+**++=+****+==++*+**#-+-----+==-+-------+==--
//--=@=---=%#---==--+*------*++*+*++#+*****++++****+--==*=*****==----===-==-------+==--
//--##----=@*---+=--+*------=++*+*++*++++++*******=-------+***==-----===-==-------+==--
//-=@+----+@=---+=--+#=-----=*+*+*++#++*+++**#*++-+-------+***-+-----+===+--------*==--
//-*@=----*@=---=---+*+------++*+*+*-=++*+***=-+--+--------#**-=-----*====--------*==--
//=%%-----#@---==---=**------++****---------*=----+--------=#=+-----=*==*---------*==--
//=@*-----%@---==---=*#------++*+------=+%@##@+==%%+*+==----+==-----+*+-++++=+++*++==--
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...