Submission #376313

#TimeUsernameProblemLanguageResultExecution timeMemory
376313YJUPaprike (COI18_paprike)C++14
0 / 100
1087 ms26732 KiB
#include<bits/stdc++.h> #pragma GCC optimize("unroll-loops,no-stack-protector,Ofast") using namespace std; typedef long long ll; typedef long double ld; typedef pair<ll,ll> pll; const ll N=2e5+5; const ll INF=(1LL<<60); const ld pi=acos(-1); const ll MOD=1e9+7; #define REP(i,n) for(int i=0;i<n;++i) #define REP1(i,n) for(int i=1;i<=n;++i) #define pb push_back #define mp make_pair #define X first #define Y second #define lwb lower_bound #define setp setprecision #define SZ(_a) (ll)_a.size() ll n,k,w[N],sum[N],x,y,dp[N]; vector<ll> v[N]; void DFS(ll nd,ll pa){ sum[nd]=w[nd]; dp[nd]=0; vector<ll> lis; for(auto i:v[nd]){ if(i==pa)continue; DFS(i,nd); dp[nd]+=dp[i]; lis.pb(sum[i]); } sort(lis.rbegin(),lis.rend()); for(ll i:lis){ if(i+sum[nd]>k)++dp[nd]; else sum[nd]+=i; } //return cnt; } int main(){ ios_base::sync_with_stdio(0);cin.tie(0); cin>>n>>k; REP1(i,n)cin>>w[i]; REP(i,n-1){ cin>>x>>y; v[x].pb(y);v[y].pb(x); } ll ans=INF; REP1(i,n){ DFS(i,0); ans=min(ans,dp[i]); } cout<<ans<<"\n"; 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...