Submission #1293792

#TimeUsernameProblemLanguageResultExecution timeMemory
1293792ayxanesedzade10Paprike (COI18_paprike)C++20
11 / 100
66 ms4156 KiB
#include <bits/stdc++.h>
#define ll long long
#define pb push_back
#define all(x) x.begin(),x.end()
#define ld long double
using namespace std;
const ll sz=1e5+100;
vector<ll>v[sz];
vector<array<ll,2>>edges;
ll used[sz],h[sz],cnt;
void dfs(ll u)
{
    used[u]=1;
    cnt+=h[u];
    for(auto to:v[u]){
        if(used[to]) continue;
        dfs(to);
    }
}
int main()
{
    ll n,k;cin>>n>>k;
    ll pre[n+5];
    pre[0]=0;
    for(int i=1;i<=n;i++){
        cin>>h[i];
        pre[i]=pre[i-1]+h[i];
    }
    for(int i=1;i<n;i++){
        ll a,b;cin>>a>>b;
        edges.pb({a,b});
    }
    ll ans=n-1;
    for(int mask=0;mask<(1<<(n-1));mask++){
        vector<array<ll,2>>v1;
        ll num=n-1;
        for(int j=0;j<n-1;j++){
            if(mask&(1<<j)){
                v1.pb({edges[j][0],edges[j][1]});num--;
            }
        }
        for(int i=0;i<=n;i++){
            used[i]=0;v[i].clear();
        }
        for(auto [to1,to2]:v1){
            v[to1].pb(to2);
            v[to2].pb(to1);
        }
        ll ok=0;
        for(int i=1;i<=n;i++){
            if(used[i]==0){
                cnt=0;
                dfs(i);
                if(cnt>k){ok=1;break;}
            }
        }
        if(ok==0){
            ans=min(ans,num);
        }
    }
    cout<<ans<<endl;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...