Cod sursa(job #154788)

Utilizator dragosmihaiDragos Oana dragosmihai Data 11 martie 2008 14:23:20
Problema Zvon Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.05 kb
#include<fstream>
using namespace std;
struct lista{
	int val;
	lista* urm;
};
int tmin[10000], t, n;
lista *li[10000];
ofstream g("zvon.out");


void adaugare(int a, int b){
 lista *q=new lista;
 q->val=b;
 q->urm=li[a];
 li[a]=q;
}


int sortare(int m){
int ok=1,p=m,maxi=0;
while(ok){
 ok=0;
 p--;
 for(int i=0;i<p;i++)
    if(tmin[i]<tmin[i+1]){
                    int aux=tmin[i];
		    tmin[i]=tmin[i+1];
		    tmin[i+1]=aux;
		    ok=0;		
}
if(maxi<tmin[p]+p+1) maxi=tmin[p]+p+1;
}
for(int i=0;i<=p;i++)
 if(maxi<tmin[i]+i+1) maxi=tmin[i]+i+1;
return maxi;
}

int minimizare(int i){
if(li[i]==NULL) return 0;
int m=0;
lista *q=li[i];
while(q){
  tmin[m++]=minimizare(q->val);
  q=q->urm;	
}
return sortare(m);
}



void citire(){
ifstream f("zvon.in");
f>>t;
for(;t;t--){
   f>>n;
   int i;
   for(i=1;i<n;i++){
	 int a,b;
	 f>>a>>b;
	 adaugare(a,b);
   }
 g<<minimizare(1)<<endl;
 for(i=1;i<=n;i++){
  li[i]=NULL;
  delete li[i];
  } 
}
f.close();
}

int main(){
citire();
g.close();
return 0;
}