Submission #1194441

#TimeUsernameProblemLanguageResultExecution timeMemory
1194441edga1Closing Time (IOI23_closing)C++20
9 / 100
1093 ms19524 KiB
#include <bits/stdc++.h>

using namespace std;

typedef long long ll;

#define fi first
#define se second
#define pb push_back
#define fastIO ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
#define MOD 1000000007

int max_score(int N, int X, int Y, ll k, vector<int> U, vector<int> V, vector<int> W){
    if(X>Y) swap(X,Y);
    vector<pair<int,int>> c[N];
    for(int i=0; i<N-1; i++){
        c[U[i]].pb({V[i],W[i]});
        c[V[i]].pb({U[i],W[i]});
    }
    vector<int> ax(N,0),ay(N,0),m(N,0);
    stack<pair<int,int>> s;
    s.push({X,0});
    while(!s.empty()){
        pair<int,int> cur=s.top();
        s.pop();
        for(int i=0; i<c[cur.fi].size(); i++){
            if(ax[c[cur.fi][i].fi]==0 && c[cur.fi][i].fi!=X){
                ax[c[cur.fi][i].fi]=cur.se+c[cur.fi][i].se;
                s.push({c[cur.fi][i].fi,cur.se+c[cur.fi][i].se});
            }
        }
    }
    s.push({Y,0});
    while(!s.empty()){
        pair<int,int> cur=s.top();
        s.pop();
        for(int i=0; i<c[cur.fi].size(); i++){
            if(ay[c[cur.fi][i].fi]==0 && c[cur.fi][i].fi!=Y){
                ay[c[cur.fi][i].fi]=cur.se+c[cur.fi][i].se;
                s.push({c[cur.fi][i].fi,cur.se+c[cur.fi][i].se});
            }
        }
    }
    m[0]=max(ax[0],ay[0]);
    for(int i=1; i<N; i++){
        m[i]=m[i-1]+max(ax[i],ay[i]);
        ax[i]+=ax[i-1];
        ay[i]+=ay[i-1];
    }
    int r=0;
    for(int sx=0; sx<=X; sx++){
        for(int bx=X; bx<N; bx++){
            for(int sy=sx; sy<=Y; sy++){
                for(int by=max(Y,bx); by<N; by++){
                    ll sum=ax[min(bx,sy-1)]+ay[by]-ay[max(sy-1,bx)];
                    if(sx>0) sum-=ax[sx-1];
                    if(bx>=sy) sum+=m[bx]-m[sy-1];
                    if(sum<=k){
                        r=max(r,bx+by-sx-sy+2);
                    }
                }
            }
        }
    }
    return r;
}
/*
int main()
{
    fastIO;
    int t=1;
    cin>>t;
    while(t--){
        int n,x,y;
        ll k;
        cin>>n>>x>>y>>k;
        vector<int> U(n), V(n), W(n);
        for(int i=0; i<n-1; i++){
            cin>>U[i]>>V[i]>>W[i];
        }
        cout<<max_score(n,x,y,k,U,V,W)<<'\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...
#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...