# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
216726 | MohamedAhmed04 | 바이오칩 (IZhO12_biochips) | C++14 | 1773 ms | 410104 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
using namespace std ;
const int MAX = 2e5 + 10 , MAXM = 502 ;
int arr[MAX] , in[MAX] , out[MAX] , id[MAX] ;
int n , m ;
vector< vector<int> >adj(MAX) ;
int tim = 0 ;
int dp[MAX][MAXM] ;
void dfs(int node)
{
in[node] = ++tim ;
id[tim] = node ;
for(auto &child : adj[node])
dfs(child) ;
out[node] = tim ;
}
int solve(int idx , int cnt)
{
if(cnt == m)
return 0 ;
if(idx == n+1)
return -1e7 ;
int &ret = dp[idx][cnt] ;
if(ret != -1)
return ret ;
ret = solve(idx+1 , cnt) ;
ret = max(ret , solve(out[id[idx]]+1 , cnt+1) + arr[id[idx]]) ;
return ret ;
}
int main()
{
memset(dp , -1 , sizeof(dp)) ;
ios_base::sync_with_stdio(0) ;
cin.tie(0) ;
cin>>n>>m ;
int root ;
for(int i = 1 ; i <= n ; ++i)
{
int par ;
cin>>par>>arr[i] ;
if(!par)
root = i ;
else
adj[par].push_back(i) ;
}
dfs(root) ;
return cout<<solve(1 , 0)<<"\n" , 0 ;
}
Compilation message (stderr)
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |