# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
827745 | MasterTaster | Biochips (IZhO12_biochips) | C++14 | 523 ms | 413640 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>
#define ll long long
#define pii pair<int, int>
#define xx first
#define yy second
#define pb push_back
#define MAXN 200010
#define MAXM 510
#define MAXX 1000000010LL
using namespace std;
int n, m, w[MAXN], gde[MAXN], r[MAXN], p, pp[MAXN];
int dp[MAXN][MAXM];
bool bio[MAXN];
vector<int> g[MAXN], svi;
void dfs(int u)
{
bio[u]=true;
svi.pb(u);
gde[u]=svi.size()-1;
for (int i=0; i<=m; i++) dp[gde[u]][i]=-MAXX;
dp[gde[u]][1]=w[u];
dp[gde[u]][0]=0;
for (auto v:g[u])
{
if (!bio[v])
dfs(v);
}
r[u]=svi.size();
///cout<<u<<":"<<endl;
///for (int i=0; i<=m; i++) cout<<dp[u][i]<<" ";
///cout<<endl;
}
int main(){
cin>>n>>m;
int koren=1;
//for (int i=1; i<=n; i++) pp[i]=1;
pp[100]=1;
for (int i=1; i<=n; i++)
{
cin>>pp[i]>>w[i];
if (pp[i]==0) { koren=i; continue; }
g[pp[i]].pb(i); g[i].pb(pp[i]);
}
dfs(koren);
//for (int i=0; i<svi.size(); i++) cout<<svi[i]<<" ";
//cout<<endl;
for (int i=svi.size()-1; i>=0; i--)
{
for (int j=0; j<=m; j++)
{
if (j==0) { dp[i][j]=0; continue; }
if (i!=svi.size()-1) dp[i][j]=max(dp[i][j], dp[i+1][j]);
//else dp[i][1]=w[svi[i]];
if (r[svi[i]]<svi.size()) dp[i][j]=max(dp[i][j], dp[r[svi[i]]][j-1]+w[svi[i]]);
//cout<<i<<" "<<j<<": "<<dp[i][j]<<endl;
}
}
int ress=-1;
for (int i=0; i<svi.size(); i++) ress=max(ress, dp[i][m]);
cout<<ress;
//cout<<dp[0][m];
}
Compilation message (stderr)
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |