Cod sursa(job #189148)

Utilizator anna_bozianuBozianu Ana anna_bozianu Data 12 mai 2008 14:49:58
Problema Atac Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.22 kb
#include<stdio.h>
struct nod{
long v;
long b;
nod *next;
};
nod *vec[32001];
long n,m,p,j,k,i,niv[32001],dad[32001][17],bom[32001][17],aa,bb,cc,dd,xx,yy,zz;
void pune();
void df(long ii, long nn);
void stramosi();
void atac(long o1, long o2, long bo1, long bo2);
int main()
{       freopen("atac.in","rt",stdin); freopen("atac.out","wt",stdout);
        scanf("%ld%ld%ld",&n,&m,&p);
        for(i=2;i<=n;i++)
        {  scanf("%ld%ld",&j,&k);
           pune();
         }
         niv[1]=1;
         df(1,1);
         stramosi();
         scanf("%ld%ld%ld%ld%ld%ld",&xx,&yy,&aa,&bb,&cc,&dd);
         for(;m>p;m--)
         {      if(xx==yy) zz=0;
                 else atac(xx,yy,100001,100001);
                xx=(xx*aa+yy*bb)%n+1;
                yy=(yy*cc+zz*dd)%n+1;
         }
         for(;m;m--)
         {      if(xx==yy) zz=0;
                 else atac(xx,yy,100001,100001);
                 printf("%ld\n",zz);
                xx=(xx*aa+yy*bb)%n+1;
                yy=(yy*cc+zz*dd)%n+1;
         }
         


}
void pune()
{     nod *paux;
        paux=new nod;
        paux->v=j;
        paux->b=k;
        paux->next=(vec[i])?vec[i]:0;
        vec[i]=paux;
         paux=new nod;
        paux->v=i;
        paux->b=k;
        paux->next=(vec[j])?vec[j]:0;
        vec[j]=paux;
}
void df(long ii, long nn)
{       nod *paux;
        for(paux=vec[ii];paux;paux=paux->next)
          if(!niv[paux->v])
            {  niv[paux->v]=nn+1;
                dad[paux->v][0]=ii;
                bom[paux->v][0]=paux->b;
                df(paux->v,nn+1);
             }
}
void stramosi()
{       long lc,lnc,coada[32001],b1,b2,t1,t2;
        lc=n-1;
        for(i=1;i<=lc;i++) coada[i]=i+1;
        lnc=0;
        for(i=1;lc;i++)
        {  for(j=1;j<=lc;j++)
            {   k=coada[j];
                t1=dad[k][i-1]; t2=dad[t1][i-1];
                if(t2)
                {  dad[k][i]=t2;
                   coada[++lnc]=k;
                   b1=bom[k][i-1];
                   b2=bom[t1][i-1];
                   bom[k][i]=(b1<b2)?b1:b2;
                 }
             }
            lc=lnc;
            lnc=0;
         }
}
void atac(long o1, long o2, long bo1, long bo2)
{
}