Cod sursa(job #832740)

Utilizator dragangabrielDragan Andrei Gabriel dragangabriel Data 11 decembrie 2012 11:47:31
Problema Mese Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.11 kb
#include <cstdio> 
#include <vector> 
#include <algorithm> 
#define maxn 100100 
  
using namespace std; 
  
int n, i, j, sol, s, a, b, rad; 
vector <int> v[maxn]; 
short int c[maxn]; 
int sum[maxn]; 
  
bool cmp(int a, int b) { 
    if (a > b) 
        return true; 
    return false; 
} 
  
void df(int nod) { 
    int st[maxn], niv; 
    st[1] = nod; niv = 1; 
    int i, fiu; 
    vector <int> p; 
    p.clear(); 
      
    sum[nod] = c[nod]; 
    for (i = 0; i < v[nod].size(); i++) { 
        fiu = v[nod][i]; 
        df(fiu); 
        sum[nod] += sum[fiu]; 
		if (sum[nod]>=s) sol++,sum[nod]=c[nod];
    } 
} 
  
int main() { 
    freopen("mese.in", "r", stdin); 
    freopen("mese.out", "w", stdout); 
      
    scanf("%d%d", &n, &s);  
    for (i = 1; i <= n; i++) { 
        scanf("%d%d", &a, &c[i]); 
        if (a)  
            v[a].push_back(i); 
        else
            rad = i; 
    } 
      
    df(rad); //am calculat sumele pentru subarbori, si tot acolo fac si partea cu impartitu pe sub-arbori 
      
    printf("%d\n", sol); 
      
    return 0; 
}