제출 #676078

#제출 시각아이디문제언어결과실행 시간메모리
676078ToroTNPaprike (COI18_paprike)C++14
13 / 100
48 ms16424 KiB
#include<bits/stdc++.h> using namespace std; #define pb push_back int n,m,a[100005],u_i,v_i,sum[100005],cnt,total,ss,ans=0,w; vector<int> v[100005]; priority_queue<int> pq; void dfs(int u,int p) { for(auto node:v[u]) { if(node!=p)dfs(node,u); } if(v[u].size()==1&&u!=1) { sum[u]=a[u]; //cout << "u=" << u << "||" << "sumu=" << sum[u] << '\n'; }else { if(u==1) { total=v[1].size(); }else { total=v[u].size()-1; } cnt=a[u]; //if(u==6)cout << u << '\n'; for(auto node:v[u]) { if(node!=p) { pq.push(-sum[node]); //if(u==6)cout << node << ' ' << sum[node] << '\n'; } } ss=-1; while(!pq.empty()) { w=-pq.top(); cnt+=w; pq.pop(); if(cnt>m) { cnt-=w; ss=pq.size()+1; break; } } sum[u]=cnt; if(ss==-1)ss=0; ans+=ss; } } int main() { ios_base::sync_with_stdio(0),cin.tie(0); cin >> n >> m; for(int i=1;i<=n;i++)cin >> a[i]; for(int i=1;i<n;i++) { cin >> u_i >> v_i; v[u_i].pb(v_i); v[v_i].pb(u_i); } dfs(1,1); 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...