Submission #540368

#TimeUsernameProblemLanguageResultExecution timeMemory
540368BadPenaltyLogičari (COCI21_logicari)C++14
110 / 110
193 ms37104 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; #define F first #define S second #define pb push_back #define endl '\n' #define all(x) x.begin(),x.end() #define yes cout<<"Yes"<<endl #define no cout<<"No"<<endl const int N = 2e5,mod = 1e9+7; vector<int>adj[N]; int head[N],par[N]; int root,special; int dp[N][2][2][2][2]; int st(int x) { if (x == head[x]) return x; return head[x] = st(head[x]); } void dfs(int x,int pr) { par[x] = pr; for(auto u:adj[x]) { if(u == pr)continue; dfs(u,x); } } int calc(int nd,int me,int up,int rt,int sp) { if(dp[nd][me][up][rt][sp]!=-1) return dp[nd][me][up][rt][sp]; bool tr = 1; if(nd==special&&rt&&up)tr = 0; if(nd==root&&me!=rt)tr = 0; if(nd==special&&me!=sp)tr = 0; if(!tr) return dp[nd][me][up][rt][sp] = 1e9; ll sum = me; for(auto u:adj[nd]) { if(u==par[nd])continue; sum+=calc(u,0,me,rt,sp); } bool cmp = 0; if(up)cmp = 1; if(nd==root&&sp)cmp = 1; if(nd==special&&rt)cmp = 1; ll res = 1e9; if(cmp) { res = min(res,sum); } else { for(auto u:adj[nd]) { if(u==par[nd])continue; ll val = sum-calc(u,0,me,rt,sp)+calc(u,1,me,rt,sp); res = min(res,val);; } } return dp[nd][me][up][rt][sp] = res; } int main() { ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0); int n; cin>>n; for(int i = 0;i<=n;i++) head[i] = i; for(int i = 0;i<n;i++) { int a,b; cin>>a>>b; int pa = st(a); int pb = st(b); if(pa==pb) { root = a; special = b; } else { head[pa] = pb; adj[a].pb(b); adj[b].pb(a); } } dfs(root,0); int ans = 1e9; // cout<<root<<' '<<special<<endl; memset(dp,-1,sizeof dp); for(int rt = 0;rt<=1;rt++) { for(int sp = 0;sp<=1;sp++) { // cout<<calc(root,rt,0,rt,sp)<<' '<<endl; // cout<<rt<<' '<<sp<<endl; ans = min(ans,calc(root,rt,0,rt,sp)); } } if(ans==1e9) cout<<-1<<endl; else cout<<ans<<endl; 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...