Submission #85829

#TimeUsernameProblemLanguageResultExecution timeMemory
85829memetkagan44Untitled (POI11_dyn)C++11
90 / 100
1611 ms66560 KiB
#include<bits/stdc++.h>
using namespace std;
int n,m,cnt,ans,ar[300005],x,y;
vector<int> v[300005];
int solve(int yer,int dad,int say){
    int t=0,q=0;
    for(int i=0;i<v[yer].size();i++){
        int go=v[yer][i];
        if(dad==go)
            continue;
        int u=solve(go,yer,say);
        if(u==0)
            continue;
        if(u>0)
            q=max(q,u);
        else
            t=min(t,u);
    }
    if(abs(t)>=say){
        ans++;
        return say;
    }
    if(t==0 && q==0)
        return (-1)*ar[yer];
    if(q>abs(t))
        return q-1;
    return t-1;
}
int ctr(int k){
    ans=0;
    if(solve(1,0,k)<0)
        ans++;
    if(ans<=m)
        return 1;
    return 0;
}
int main(){
    scanf("%d %d",&n,&m);
    for(int i=1;i<=n;i++){
        scanf("%d",&ar[i]);
        cnt+=ar[i];
    }
	for(int i=1;i<n;i++){
        scanf("%d %d",&x,&y);
        v[x].push_back(y);
        v[y].push_back(x);
    }
    if(cnt<=m){
        printf("0\n");
        return 0;
    }
    int l=1,r=n;
    while(l<=r){
        int mid=(l+r)/2;
        if(ctr(mid))
            r=mid-1;
        else
            l=mid+1;
    }
    printf("%d\n",l);
    return 0;
}

Compilation message (stderr)

dyn.cpp: In function 'int solve(int, int, int)':
dyn.cpp:7:18: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for(int i=0;i<v[yer].size();i++){
                 ~^~~~~~~~~~~~~~
dyn.cpp: In function 'int main()':
dyn.cpp:38:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     scanf("%d %d",&n,&m);
     ~~~~~^~~~~~~~~~~~~~~
dyn.cpp:40:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
         scanf("%d",&ar[i]);
         ~~~~~^~~~~~~~~~~~~
dyn.cpp:44:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
         scanf("%d %d",&x,&y);
         ~~~~~^~~~~~~~~~~~~~~
#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...