Submission #85831

#TimeUsernameProblemLanguageResultExecution timeMemory
85831memetkagan44Untitled (POI11_dyn)C++11
100 / 100
1551 ms41440 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:22: 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:14: 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:18: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
             scanf("%d",&ar[i]);
             ~~~~~^~~~~~~~~~~~~
dyn.cpp:44:18: 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...