Cod sursa(job #276969)

Utilizator Sorin_IonutBYSorynyos Sorin_Ionut Data 11 martie 2009 14:00:23
Problema Mese Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.88 kb
#include <iostream.h>
#include <fstream.h>

#define IN "mese.in"
#define OUT "mese.out"
#define max 100111

ifstream fin(IN);
ofstream fout(OUT);

long s,n,cd;
long val[max],g[max],coada[max],t[max];
int sw=1;

int main()
{
 long i;
 fin>>n>>s;
 for(i=1;i<=n;i++)
 {
  fin>>t[i];
  fin>>val[i];
  if(t[i])
  {
   g[i]++;
   g[t[i]]++;
  }
 }
 fin.close();
 
 while(sw)
 {
  cd=0;   
  for(i=1;i<=n;i++)   
   if(g[i]==1)
   {
    cd++;
    coada[cd]=i;
   }
   
   if(cd==0)
    break;
    
  for(i=1;i<=cd;i++) 
   if(val[coada[i]]+val[t[coada[i]]]<=s)
   {
    val[t[coada[i]]]+=val[coada[i]];
    val[coada[i]]=0;
    g[coada[i]]--;
    g[t[coada[i]]]--;
   }
   else
   {
    g[coada[i]]--;
    g[t[coada[i]]]--;
   }
  }
  
  cd=0;
  for(i=1;i<=n;i++)
   if(val[i])
    cd++;
  fout<<cd<<endl;
  fout.close();
  
  return 0;
}