#include <bits/stdc++.h>
using namespace std;
#define int long long
using pii = pair<int, int>;
#define all(x) (x).begin(), (x).end()
vector<int> values;
vector<int> days;
vector<vector<int>> adj;
map<int, int> dayscompressed;
int maxx[100001];
int tt;
pair<int, int> dpf(int node, int limd){
int res2= 0;
int maxxx=-1;
for(auto thing:adj[node]){
auto x = dpf(thing, (int)1e9);
res2+=x.first;
maxxx=max(maxxx, x.second);
}
int tt=maxxx;
if(maxxx<=days[node] && values[node]==1){
res2++;
tt=days[node];
}
return {res2, tt};
}
int maxds(int node){
int res = days[node];
for(auto thing:adj[node]){
res=max(res, maxds(thing));
}
maxx[node]=res;
return res;
}
void solve(){
int n, m, k;cin>>n>>m>>k;
values.assign(n+1, 0);
days.assign(n+1, 0);
adj.resize(n+1);
vector<int> ds = {0};
for(int i = 2;i<=n;i++){
int p;cin>>p;
adj[p].push_back(i);
}
for(int i = 0;i<m;i++){
int v, d, w;cin>>v>>d>>w;
values[v]=w;
days[v]=d;
ds.push_back(d);
}
sort(all(ds));
int cp=0;
for(int i = 0;i<ds.size();i++){
if(i==0 || ds[i]!=ds[i-1]){
dayscompressed[ds[i]]=cp;
cp++;
}
}
tt=cp;
dayscompressed[(int)1e9]=cp;
for(auto& thing:days){
thing=dayscompressed[thing];
}
bool isss3 = (*max_element(all(values))==1);
maxds(1);
cout << dpf(1, (int)1e9).first << '\n';
}
signed main(){
ios_base::sync_with_stdio(false);cin.tie(0);
int t = 1;
while (t--)
{
solve();
}
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |