제출 #1220868

#제출 시각아이디문제언어결과실행 시간메모리
1220868TrumlingMagic Tree (CEOI19_magictree)C++20
34 / 100
520 ms1114112 KiB
//Trumling ©
//Αφόδευε υψηλά και ηγνάντει 
#include <bits/stdc++.h>
using namespace std; 

typedef long long ll;
#define pb push_back
#define F first
#define S second
#define enter cout<<'\n';
#define INF 99999999999999999
#define MOD 1000000007
#define all(x) x.begin(),x.end()

vector<vector<ll>>g;
vector<pair<ll,ll>>f;
vector<vector<ll>>d;
vector<vector<ll>>dp;
ll k;
void dfs(int start,int pre)
{
    d[start][f[start].F]=f[start].S;

    for(auto x:g[start])
        if(x!=pre)
        {
            dfs(x,start);
            ll maxi=0;
            for(int i=1;i<=k;i++)
            {
                maxi=max(maxi,d[x][i]);
                d[start][i]+=maxi;
            }
        }
}

void dfs2(int start,int pre,ll &get,ll day)
{

            
    for(auto x:g[start])
        if(x!=pre)
            dfs2(x,start,get,day);    
    
        
     
}

int main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
ll n,m;
cin>>n>>m>>k;
g.assign(n+1,vector<ll>());
f.assign(n+1,{0,0});
d.assign(n+1,vector<ll>(k+1,0));
dp.assign(n+1,vector<ll>(k+1,0));

for(int i=2;i<=n;i++)
{
    ll x;
    cin>>x;
    g[i].pb(x);
    g[x].pb(i);
}

for(int i=0;i<m;i++)
    {
        ll x,y,z;
        cin>>x>>y>>z;
        f[x]={y,z};
    }
dfs(1,1);
ll ans=0;
for(int i=1;i<=k;i++)
    ans=max(ans,d[1][i]);
cout<<ans;
}

#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...