/ SeriousOJ /

Record Detail

Accepted


  
# Status Time Cost Memory Cost
#1 Accepted 1ms 584.0 KiB
#2 Accepted 1ms 540.0 KiB
#3 Accepted 1ms 584.0 KiB
#4 Accepted 1ms 776.0 KiB
#5 Accepted 1ms 772.0 KiB
#6 Accepted 1ms 772.0 KiB
#7 Accepted 1ms 540.0 KiB
#8 Accepted 1ms 540.0 KiB
#9 Accepted 1ms 540.0 KiB
#10 Accepted 2ms 540.0 KiB
#11 Accepted 2ms 2.527 MiB
#12 Accepted 174ms 240.211 MiB
#13 Accepted 475ms 240.105 MiB
#14 Accepted 515ms 240.371 MiB
#15 Accepted 546ms 240.254 MiB
#16 Accepted 321ms 240.27 MiB
#17 Accepted 292ms 240.258 MiB
#18 Accepted 277ms 240.195 MiB
#19 Accepted 369ms 240.27 MiB
#20 Accepted 202ms 240.113 MiB
#21 Accepted 188ms 240.289 MiB
#22 Accepted 256ms 240.312 MiB
#23 Accepted 272ms 240.27 MiB
#24 Accepted 368ms 240.27 MiB
#25 Accepted 404ms 240.121 MiB
#26 Accepted 137ms 240.117 MiB
#27 Accepted 649ms 240.117 MiB
#28 Accepted 148ms 240.191 MiB
#29 Accepted 192ms 240.34 MiB
#30 Accepted 425ms 240.18 MiB
#31 Accepted 575ms 240.27 MiB
#32 Accepted 1815ms 259.562 MiB
#33 Accepted 1262ms 259.488 MiB
#34 Accepted 271ms 240.52 MiB
#35 Accepted 320ms 240.52 MiB
#36 Accepted 202ms 240.367 MiB
#37 Accepted 163ms 240.363 MiB
#38 Accepted 336ms 240.359 MiB
#39 Accepted 177ms 240.574 MiB
#40 Accepted 240ms 240.52 MiB
#41 Accepted 261ms 240.363 MiB
#42 Accepted 900ms 240.125 MiB
#43 Accepted 601ms 240.113 MiB
#44 Accepted 522ms 240.117 MiB
#45 Accepted 657ms 240.27 MiB
#46 Accepted 278ms 240.359 MiB
#47 Accepted 1044ms 240.27 MiB
#48 Accepted 583ms 240.27 MiB
#49 Accepted 174ms 240.27 MiB
#50 Accepted 1776ms 240.277 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
P1160 Max path sum (Easy Version)
Language
C++17 (G++ 13.2.0)
Submit At
2025-02-17 18:28:09
Judged At
2025-02-17 18:28:09
Judged By
Score
100
Total Time
1815ms
Peak Memory
259.562 MiB