제출 #1265970

#제출 시각아이디문제언어결과실행 시간메모리
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...