Submission #1356312

#TimeUsernameProblemLanguageResultExecution timeMemory
1356312silence25Harmonija (COCI25_harmonija)C++20
68 / 110
12 ms620 KiB
#include "bits/stdc++.h"

using namespace std;

#define ff first
#define ss second
#define pp pop_back
#define ll long long
#define pb push_back
#define pq priority_queue
#define ls(v) (int)v.size()
#define all(v) v.begin(),v.end()
#define rall(v) v.rbegin(),v.rend()
#define wr cout << "------------------------" << endl
#define tt debug

const ll INF = 1e9 + 7;
const int N = 1005;
const int X = 3;
ll dp[N][10];
vector<int>g[N];
int c[N];
int p[N];

void dfs(int nd,int par){
    dp[nd][0 + X] = max(dp[par][-1 + X] + p[nd],dp[par][1 + X] + c[nd]);
    dp[nd][1 + X] = max(dp[par][0 + X] + p[nd],dp[par][2 + X] + c[nd]);
    dp[nd][2 + X] = dp[par][1 + X] + p[nd];
    dp[nd][-1 + X] = max(dp[par][-2 + X] + p[nd],dp[par][0 + X] + c[nd]);
    dp[nd][-2 + X] = dp[par][-1 + X] + c[nd];
    for(auto it:g[nd])
        if(it != par)
            dfs(it,nd);
}

void show(int nd){
    cout << max({dp[nd][-1 + X],dp[nd][-2 + X],dp[nd][0 + X],dp[nd][1 + X],dp[nd][2 + X]}) << endl;
}

signed main(){
#ifdef parad0x
    freopen("file.in","r",stdin);
#endif
    #define print(...) 42

    
    ios::sync_with_stdio(false);cin.tie(nullptr);
    memset(dp,-INF,sizeof(dp));
    dp[0][0 + X] = 0;
    int n,q;
    cin >> n >> q;
    for(int i = 1;i<=n;++i)
        cin >> c[i];
    for(int i = 1;i<=n;++i)
        cin >> p[i];
    for(int i = 1,a,b;i<n;++i){
        cin >> a >> b;
        g[a].pb(b);
        g[b].pb(a);
    }
    while(q--){
        int a,b;
        cin >> a >> b;
        dfs(a,0);
        show(b);
    }
    return 0;
}
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...