# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
827745 | MasterTaster | 바이오칩 (IZhO12_biochips) | C++14 | 523 ms | 413640 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#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];
}
컴파일 시 표준 에러 (stderr) 메시지
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |