제출 #1118336

#제출 시각아이디문제언어결과실행 시간메모리
1118336alexddMagic Tree (CEOI19_magictree)C++17
34 / 100
1045 ms1048576 KiB
#include<bits/stdc++.h>
using namespace std;
#define int long long
int n,m,k;
vector<int> con[100005];
int parent[100005];
int d[100005],w[100005];
vector<int> dp[100005];
void dfs(int nod)
{
    dp[nod].resize(k+2,0);
    for(int adj:con[nod])
    {
        dfs(adj);
        for(int i=1;i<=k;i++)
            dp[nod][i] += dp[adj][i];
    }
    //for(int i=d[nod];i<=k;i++)
      //  dp[nod][i] += w[nod];
    dp[nod][d[nod]] += w[nod];
    for(int i=1;i<=k;i++)
        dp[nod][i] = max(dp[nod][i], dp[nod][i-1]);
    //for(int i=1;i<=k;i++) cout<<nod<<" "<<i<<"  "<<dp[nod][i]<<" dp\n";
}
signed main()
{
    ios_base::sync_with_stdio(0);cin.tie(0);
    cin>>n>>m>>k;
    for(int i=2;i<=n;i++)
    {
        cin>>parent[i];
        con[parent[i]].push_back(i);
    }
    for(int i=1;i<=m;i++)
    {
        int x;
        cin>>x;
        cin>>d[x]>>w[x];
    }
    dfs(1);
    cout<<dp[1][k];
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...