Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <queue>
- #define MAX 100010
- using namespace std;
- int dp[MAX][2], Sum[MAX];
- int BB, i, j, n;
- struct emp{
- int id, val, boss;
- emp(int i, int v, int b){
- id = i; val = v; boss = b;
- }
- };
- vector <emp> sons;
- vector <int> son_values[MAX];
- int find(int father){
- int sum = 0;
- for(int k = 0; k < son_values[father].size();k++)
- sum += dp[k][0];
- //cout << "Sum = "<<sum<<endl;
- return sum;
- }
- int findI(int father){
- int sum = 0;
- for(int k = 0; k < son_values[father].size();k++)
- sum += max(dp[k][1],dp[k][0]);
- //cout << "Sum = "<<sum<<endl;
- return sum;
- }
- int main(){
- cin >> n;
- cin >> BB;
- sons.push_back(emp(0,BB,-1));
- for(i=1;i<=n-1;i++){
- int boss, val;
- cin >> boss >>val;
- son_values[boss].push_back(val);
- sons.push_back(emp(i,val,boss));
- }
- dp[n-1][1]=BB;dp[n-1][0]=0;
- for(i=n-2;i>=0;i--){
- dp[i][1]= find(i);
- dp[i][0]= findI(i);
- }
- /*for(i=0;i<=n;i++){
- for(j=0;j<2;j++){
- cout<<dp[i][j]<<" ";
- }
- cout<<endl;
- }*/
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement