/ SeriousOJ /

Record Detail

Wrong Answer


  
# Status Time Cost Memory Cost
#1 Accepted 1ms 540.0 KiB
#2 Accepted 1ms 540.0 KiB
#3 Accepted 1ms 540.0 KiB
#4 Accepted 1ms 588.0 KiB
#5 Accepted 1ms 580.0 KiB
#6 Accepted 1ms 540.0 KiB
#7 Accepted 2ms 540.0 KiB
#8 Accepted 1ms 540.0 KiB
#9 Accepted 2ms 584.0 KiB
#10 Accepted 1ms 540.0 KiB
#11 Accepted 1ms 844.0 KiB
#12 Accepted 189ms 473.453 MiB
#13 Wrong Answer 233ms 473.352 MiB
#14 Wrong Answer 242ms 473.363 MiB

Code

#include<bits/stdc++.h>
using namespace std;

#define all(a) a.begin(),a.end()
#define el "\n"
#define int long long

// Optimized prime check
bool isprime(int n){
    if(n < 2) return false;
    if(n == 2 || n == 3) return true;
    if(n % 2 == 0 || n % 3 == 0) return false;
    for(int i = 5; i * i <= n; i += 6) {
        if(n % i == 0 || n % (i + 2) == 0) return false;
    }
    return true;
}
  int dp[100005][2][305];
void chori_ka_laptop(){
// for all node find for left
    int n; cin>>n;
    int k; cin>>k;
    vector<int>a(n);
    vector<vector<int>>adj(n);
    for(auto &i:a) cin>>i;
        for(int i=0;i<n-1;i++){
            int x,y; cin>>x>>y;
            x--,y--;
            adj[x].push_back(y);
            adj[y].push_back(x);
        }
      
        for(int i=0;i<=n;i++){
            for(int j=0;j<2;j++){
                for(int cur=0;cur<=k;cur++){
                    dp[i][j][cur]=-1e15;
                }
            }
        }
        auto dfs=[&](auto &&self,int node,int par)->void{
           
            for(auto i:adj[node]){
                if(i==par )continue;
                self(self,i,node);
            }
            dp[node][0][0]=0;
            dp[node][1][0]=0;
            vector<int>v;
            for(auto i:adj[node]){
                if(i==par) continue;
                v.push_back(i);
            }
             if(v.size()==0) return;
            for(int i=1;i<=k;i++){
                dp[node][0][i]=max(dp[v[0]][0][i-1],dp[v[0]][1][i-1])+
                a[v[0]];
                ;
            }
            if(v.size()==1) return;
             for(int i=1;i<=k;i++){
                dp[node][1][i]=max(dp[v[1]][0][i-1],dp[v[1]][1][i-1])+
                a[v[1]];
            }

        };
        dfs(dfs,0,-1);
        int ans=-1e15;
      
        for(int i=0;i<n;i++){
            for(int cur=0; cur<=k-1;cur++){
                ans=max(ans,dp[i][0][cur]+dp[i][1][k-cur-1]+a[i]);
            }
        }

        if(ans<0) ans=-1;
        cout<<ans<<el;
}


int32_t main(){ 
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);

// #ifndef ONLINE_JUDGE
//     freopen("input1.txt", "r", stdin);
//     freopen("D://sublime text//output6.txt", "w", stdout);
// #endif 

    int t = 1;  
    //cin >> t;
    while(t--) {
        chori_ka_laptop();
    }

    return 0;
}

Information

Submit By
Type
Submission
Problem
P1160 Max path sum (Easy Version)
Contest
Brain Booster #8
Language
C++17 (G++ 13.2.0)
Submit At
2025-02-17 16:47:41
Judged At
2025-02-17 16:47:41
Judged By
Score
24
Total Time
242ms
Peak Memory
473.453 MiB