Cod sursa(job #1701607)

Utilizator iordache.bogdanIordache Ioan-Bogdan iordache.bogdan Data 13 mai 2016 17:17:50
Problema Mese Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.85 kb
#include <fstream>
#include <algorithm>
#include <vector>
#include <cstring>

using namespace std;

ifstream fin("mese.in");
ofstream fout("mese.out");

const int dim = 100005;

int n, maxSum;
short old[dim], sum[dim], v[dim];

vector<int> g[dim];

int sol, k;
void dfs(int node) {

	sum[node] = old[node];
	for (int adj : g[node])
		dfs(adj);

	k = 0;
	for (int adj : g[node])
		v[++k] = sum[adj];

	sort(v + 1, v + k + 1);
	int cnt = k;
	for (int i = 1; i <= k; ++i) {

		if (sum[node] + v[i] > maxSum)
			break;

		sum[node] += v[i];
		--cnt;

	}

	sol += cnt;

}

int main() {

	fin >> n >> maxSum;
	for (int i = 1; i <= n; ++i) {

		int x, y;
		fin >> x >> y;

		g[x].push_back(i);
		old[i] = y;

	}

	old[0] = maxSum + 1;
	dfs(0);
	fout << sol << '\n';

	return 0;

}

//Trust me, I'm the Doctor!