/ SeriousOJ /

Record Detail

Accepted


  
# Status Time Cost Memory Cost
#1 Accepted 1ms 588.0 KiB
#2 Accepted 1ms 796.0 KiB
#3 Accepted 1ms 584.0 KiB
#4 Accepted 1ms 816.0 KiB
#5 Accepted 1ms 768.0 KiB
#6 Accepted 1ms 796.0 KiB
#7 Accepted 1ms 636.0 KiB
#8 Accepted 1ms 540.0 KiB
#9 Accepted 1ms 540.0 KiB
#10 Accepted 1ms 540.0 KiB
#11 Accepted 1ms 540.0 KiB
#12 Accepted 394ms 240.242 MiB
#13 Accepted 638ms 240.367 MiB
#14 Accepted 392ms 240.27 MiB
#15 Accepted 443ms 240.328 MiB
#16 Accepted 242ms 240.27 MiB
#17 Accepted 366ms 240.309 MiB
#18 Accepted 351ms 240.27 MiB
#19 Accepted 561ms 240.27 MiB
#20 Accepted 240ms 240.258 MiB
#21 Accepted 633ms 240.422 MiB
#22 Accepted 156ms 240.281 MiB
#23 Accepted 518ms 240.332 MiB
#24 Accepted 324ms 240.27 MiB
#25 Accepted 217ms 240.359 MiB
#26 Accepted 151ms 240.352 MiB
#27 Accepted 209ms 240.367 MiB
#28 Accepted 145ms 240.195 MiB
#29 Accepted 580ms 240.27 MiB
#30 Accepted 394ms 240.27 MiB
#31 Accepted 524ms 240.359 MiB
#32 Accepted 565ms 240.27 MiB
#33 Accepted 541ms 240.273 MiB
#34 Accepted 166ms 240.27 MiB
#35 Accepted 231ms 240.52 MiB
#36 Accepted 192ms 240.316 MiB
#37 Accepted 536ms 240.27 MiB
#38 Accepted 205ms 240.363 MiB
#39 Accepted 384ms 240.27 MiB
#40 Accepted 240ms 240.316 MiB
#41 Accepted 576ms 240.312 MiB
#42 Accepted 172ms 240.52 MiB
#43 Accepted 191ms 240.543 MiB
#44 Accepted 140ms 240.594 MiB
#45 Accepted 141ms 240.504 MiB
#46 Accepted 140ms 240.547 MiB
#47 Accepted 712ms 259.484 MiB
#48 Accepted 712ms 249.52 MiB
#49 Accepted 663ms 250.426 MiB
#50 Accepted 175ms 250.375 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][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]=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
P1161 Max path sum (Hard Version)
Language
C++17 (G++ 13.2.0)
Submit At
2025-02-17 18:29:05
Judged At
2025-02-17 18:29:05
Judged By
Score
100
Total Time
712ms
Peak Memory
259.484 MiB