Pagini recente » Cod sursa (job #1990377) | Cod sursa (job #1702458) | Cod sursa (job #2215294) | Cod sursa (job #2147598) | Cod sursa (job #983806)
Cod sursa(job #983806)
#include<cstdio>
#include<vector>
using namespace std;
int i,n,s,x,rez;
int v[100009];
struct nod{
int x;
nod *fiu;
};
nod *l[100002];
//vector<int>l[100010];
void dfs(int x)
{
nod *it=l[x];
while(it)
{
dfs(it->x);
v[x]+=v[it->x];
it=it->fiu;
}
while(v[x]>s)
{
++rez;
int vmax=-1,itmax;
it=l[x];
while(it)
{
if(v[it->x]>vmax)
vmax=v[it->x],itmax=it->x;
it=it->fiu;
}
v[x]-=vmax;
v[itmax]=0;
}
}
void insereaza(int x,int y)
{
nod *n=new nod;
n->x=y;
n->fiu=l[x];
l[x]=n;
}
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",&x,&v[i]);
insereaza(x,i);
// l[x].push_back(i);
}
dfs(0);
printf("%d\n",rez+1);
return 0;
}