Cod sursa(job #695795)

Utilizator hiticas_abelhiticasabel hiticas_abel Data 28 februarie 2012 14:50:28
Problema Zvon Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.28 kb
#include <fstream>
#include <vector>
#include <bitset>
using namespace std;
const int maxn=100005;
int c[maxn],k,n,m,i,x,y;
long long  timp,cost[maxn];
vector <int> A[maxn];

bitset <maxn>viz;

ifstream f("zvon.in");
ofstream g("zvon.out");
void citire()
{
     int x,y,i;
    // f>>n>>m>>k;
     
     f>>n;
    
     for(i=1;i<n;i++)
     {
                      f>>x>>y;
                      A[x].push_back(y);
                      A[y].push_back(x);
                      }
    f.close();
     }
void bfs(int k)
{
    timp=0;
     int li,ls,i,nod,NV,timp,costu_lu_nod;
    for(i=1;i<=n;i++)
    viz[i]=cost[i]=0;
    
     li=1;
     ls=1;
     c[li]=k;
     viz[k]=1;
     cost[k]=1;
     while(li<=ls)
     {
                  nod=c[li];
                  NV=A[nod].size();
               costu_lu_nod=cost[nod];
               timp=0;
                  for(i=0;i<NV;i++)
                  
                  if(!viz[A[nod][i]])
                  {  
                                      ls++;
                                      c[ls]=A[nod][i];
                                      viz[A[nod][i]]=1;
                                      cost[A[nod][i]]=costu_lu_nod+timp;
                                        timp++;
                                     
                                    
                                       
                  }
                                       
                  li++;
                  }
                  
                  }
                  
int main()
{int t;
int i,j;
/*
citire();
bfs(1);

 int maxim=cost[1];
   for(i=2;i<=n;i++)
     
    // g<<cost[i]<<" ";
     if(maxim<cost[i]) maxim=cost[i];
     if(maxim==1)
        g<<0;
     else
        g<<maxim<<"\n";

for(j=1;j<=n;j++)
                 {A[j].erase(A[j].begin(), A[j].end());
                 
                
                 }



 */

f>>t;
for(i=1;i<=t;i++)
{  
    
 
      citire();
      bfs(1);
      int maxim=cost[1];
   for(i=2;i<=n;i++)
     if(maxim<cost[i]) maxim=cost[i];
        if(maxim==1)
            g<<0<<"\n";
         else
            g<<maxim<<"\n";
  
  for(j=1;j<=n;j++)
  {
   A[j].erase(A[j].begin(), A[j].end());
  }
   
}
    g.close();
    return 0;
}