/ SeriousOJ /

Record Detail

Wrong Answer


  
# Status Time Cost Memory Cost
#1 Accepted 1ms 532.0 KiB
#2 Accepted 1ms 532.0 KiB
#3 Wrong Answer 1ms 532.0 KiB
#4 Wrong Answer 1ms 532.0 KiB

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][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 cur=0;cur<=k;cur++){
                    dp[i][cur]=-1e15;
                }
            
        }
        int ans=-1e15;
        auto dfs=[&](auto &&self,int node,int par)->void{
           
            for(auto i:adj[node]){
                if(i==par )continue;
                self(self,i,node);
            }
             vector<vector<int>>v;
               v.push_back({0,0,0,0});
               for(int j=0;j<=k-1;j++){
                int maxi=-1e15; int second_maxi=-1e15;
                int max_index=-1; int second_max_index=-1;
                int p=1;
              
        for(auto i:adj[node]){
            if(i==par) continue;
            p++;
            int cur=dp[i][j]+a[i];
            if(cur>maxi){
                second_maxi=maxi;
                second_max_index=max_index;
                maxi=cur;
                max_index=p;
            }
            else if(cur>second_maxi){
                second_maxi=cur;
                second_max_index=p;
            }}
            v.push_back({maxi,second_maxi,max_index,second_max_index});
        }
        dp[node][0]=0;
        for(int j=0;j<=k-1;j++){
            int recip=k-1-j;
            int index=v[j][2];
            if(v[recip][2]!=index){
                ans=max(v[j][0]+v[recip][0]+a[node],ans);
            }
            else ans=max(v[j][0]+v[recip][1]+a[node],ans);
            dp[node][j+1]=v[j][0];
        }
        };
        dfs(dfs,0,-1);
     
        if(ans<0) ans=0;
        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)
Language
C++17 (G++ 13.2.0)
Submit At
2025-02-17 18:20:19
Judged At
2025-02-17 18:20:19
Judged By
Score
4
Total Time
1ms
Peak Memory
532.0 KiB