# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
1247928 | quocbaoo | Biochips (IZhO12_biochips) | C++20 | 1806 ms | 401992 KiB |
#include<bits/stdc++.h>
#define fi first
#define se second
#define ll long long
using namespace std;
const int N=2e5,INF=1e9+7;
int bd[N+5];int n,m;int dp[N+5][505],cnt=0,nex[N+5],ke[N+5],a[N+5];
vector<int> g[N+5];
void dfs(int u){
cnt++;bd[cnt]=u;
for (auto j:g[u]){
if (ke[u]==0) ke[u]=j;dfs(j);
}
nex[u]=cnt+1;
}
int f(int i,int j){
if (j>m) return -1e9;
if (i>n){
if (j==m) return 0;return -1e9;
}
if (dp[i][j]!=-INF) return dp[i][j];
int ans=-1e9;
ans=max(ans,f(bd[nex[i]],j));
ans=max(ans,a[i]+f(bd[nex[i]],j+1));
if (ke[i]!=0) ans=max(ans,f(ke[i],j));
// cout<<i<<" "<<a[i]<<endl;
return dp[i][j]=ans;
}
int main(){
if (fopen("biochips.inp","r")){
freopen("biochips.inp","r",stdin);
freopen("biochips.out","w",stdout);
}
ios_base::sync_with_stdio(0);
cin.tie(0);cout.tie(0);
cin>>n>>m;
int cha=1;
for (int i=1;i<=n;i++){
int u,x;cin>>u>>x;
if (u==0) cha=i;
else g[u].push_back(i);
a[i]=x;
}
for(int i=1;i<=n;i++){
for (int j=0;j<=m;j++) dp[i][j]=-INF;
}
bd[n+1]=n+1;
dfs(cha);
// cout<<nex[7]<<endl;
cout<<f(cha,0);
}
Compilation message (stderr)
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |