➤ Problem Link : 682C. Alyona and the Tree
✅ C++ Solution :
#include<bits/stdc++.h> using namespace std; #define ll long long int int n; int ans=0; ll sz[100002]; ll arr[100002]; vector<pair<int,ll> > adj[100002]; #define mp make_pair #define pb push_back int calcSize(int v, int p) { sz[v]=1; if(p!=-1 && adj[v].size()==1) return 1; for(int i=0;i<adj[v].size();i++) { if(adj[v][i].first==p) continue; sz[v]+=calcSize(adj[v][i].first, v); } return sz[v]; } void dfs(int v,int p, ll mxval) { if(mxval > arr[v]) { ans+=sz[v]; return; } for(int i=0;i<adj[v].size();i++) { if(adj[v][i].first==p) continue; ll curr=max(adj[v][i].second,mxval+adj[v][i].second); dfs(adj[v][i].first,v,curr); } } int main() { int p; ll c; cin>>n; for(int i=1;i<=n;i++) cin>>arr[i]; for(int i=1;i<n;i++) { cin>>p>>c; adj[i+1].pb(mp(p,c)); adj[p].pb(mp(i+1,c)); } memset(sz,0,sizeof(sz)); calcSize(1,-1); // cout<<sz[1]<<endl; dfs(1,-1,(ll)-1*pow(10,9)); cout<<ans; }
Thank you for your patience reading. If you enjoyed this post, I’d be very grateful if you’d help it spread by emailing it to a friend, or sharing it on Whatsapp or Facebook.
😇Happy Learning!!