Submission #504022

#TimeUsernameProblemLanguageResultExecution timeMemory
504022tgbegimxUntitled (POI11_dyn)C++17
70 / 100
578 ms41148 KiB
#include <bits/stdc++.h> #define fast ios_base::sync_with_stdio(0) ; cin.tie(0);cout.tie(0) #define ll long long #define foru(i,l,r) for(int i=l;i<=r;i++) #define ford(i,l,r) for(int i=l;i>=r;i--) #define pb push_back using namespace std; const int N=2e5+10; vector<int> d; vector<vector<int>> ke; int f[N],num,kt[N]; int n,m; void dfs(int k,int u,int fa) { int mx1=-1e9,mx2=-1e9; if(d[u]) mx1=0; for(auto v:ke[u]) if(v!=fa) { //cout<<v<<' '; dfs(k,v,u); if(kt[v]==1) mx1=max(mx1,f[v]+1); if(kt[v]==2) mx2=max(mx2,f[v]-1); } if(mx1>mx2) { if(mx1>=k) { ++num,kt[u]=2,f[u]=k; if(num>m) kt[u]=-1; } else kt[u]=1,f[u]=mx1; } else kt[u]=2,f[u]=mx2; } bool check(int k) { num=0; dfs(k,1,-1); //cout<<'\n'; if(kt[1]==-1) return 0; if(kt[1]==1&&f[1]>=0) ++num; return num<=m; } void solve() { cin>>n>>m; d.resize(n+1); ke.resize(n+5); foru(i,1,n) cin>>d[i]; foru(i,1,n-1) { int u,v; cin>>u>>v; ke[u].pb(v); ke[v].pb(u); } //for(auto v:ke[5]) cout<<v<<' '; int l=0,r=n; int ans=0; while(l<=r) { int mid=(l+r)>>1; //cout<<check(mid)<<' '; if(check(mid)) ans=mid,r=mid-1; else l=mid+1; } cout<<ans; } int main() { //freopen("main.inp","r",stdin); //freopen("main.out","w",stdout); fast; int t=1; //cin>>t; while(t--) solve(); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...