Pagini recente » Cod sursa (job #903527) | Cod sursa (job #2954860) | Cod sursa (job #1946106) | Cod sursa (job #2000655) | Cod sursa (job #987368)
Cod sursa(job #987368)
#include<iostream>
#include<fstream>
#include<vector>
#include<algorithm>
using namespace std;
typedef vector<int>::iterator it;
typedef vector<pair<int,int> >::iterator itv;
ifstream f("mese.in");
ofstream g("mese.out");
#define MaxN 100100
int N,S;
vector<int> A[MaxN];
int D[MaxN];
int Sum[MaxN];
void citire(void)
{
int t,a;
f >> N >> S;
for(int i=1;i<=N;i++)
{
f >> t >> a;
A[t].push_back(i);
Sum[i] = a;
}
}
inline void DF(int nod)
{
for(it i=A[nod].begin();i<A[nod].end();i++)
DF(*i);
vector<pair<int,int> > Noduri;
for(it i=A[nod].begin();i<A[nod].end();i++)
Noduri.push_back(make_pair(Sum[*i],D[*i]));
sort(Noduri.begin(),Noduri.end());
for(itv i=Noduri.begin();i<Noduri.end();i++)
D[nod] += i->second;
int poz = 0;
for(itv i=Noduri.begin();i<Noduri.end();i++, ++ poz)
if(Sum[nod] + i->first > S)
{
D[nod] += Noduri.size() - poz;
return ;
}
else
Sum[nod] += i->first;
}
int main()
{
citire();
DF(A[0][0]);
g << D[A[0][0]] + (Sum[A[0][0]] > 0) << "\n";
}