Cod sursa(job #253305)

Utilizator 630r63Ilinca George Mihai 630r63 Data 5 februarie 2009 17:35:03
Problema Radiatie Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.73 kb
 #include<stdio.h>  
 #include<stdlib.h>  
 #define nmax 15005  
 #define nmaxx 30005  
 struct szar  
  {  
   int e1,e2;  
   long long cost;  
  };  
 szar el[nmaxx];  
 int fej[nmax],rg[nmax],w[nmax],wer[nmax];  
 long long max (int val1, int val2)  
  {  
   return ( (val1 > val2) ? val1: val2);  
  }  
   
 int cmp (const void *a, const void *b)  
  {  
   return (((szar*)a)->cost-((szar*)b)->cost);  
  }  
 int go (int x)  
  {  
   int r;  
   for (r=x;fej[r]!=r;r=fej[r]) ;  
   return r;  
  }  
   
 void egyesit (int x,int y,int q)  
  {  
   if (rg[x]>rg[y])  
     fej[y]=x, w[y]=q;  
   else  
     fej[x]=y, w[x]=q;  
   if (rg[x]==rg[y])  
     rg[y]++;  
  }  
   
 void bejar(int x,int r)  
  {  
   wer[x]+=r;  
   if (fej[x]!=x)  
     bejar(fej[x],r);  
  }  
   
 long long fin (int i)  
  {  
   if (wer[i]==2)  
     return 0;  
   return max(fin(fej[i]),w[i]);  
  }  
   
 int main()  
  {  
   freopen("radiatie.in","r",stdin);  
   freopen("radiatie.out","w",stdout);  
   int n,m,k,i,x,y;  
   scanf("%d%d%d",&n,&m,&k);  
   for (i=1;i<=m;++i)  
    scanf("%d%d%d",&el[i].e1,&el[i].e2,&el[i].cost);  
   el[0].cost=-1;  
   qsort(el,m+1,sizeof(szar),cmp);  
   int nr=0;  
   for(i=1;i<=n;++i)  
     {  
      rg[i]=1;  
      fej[i]=i;  
     }  
   int r1,r2;  
   for (i=1;nr<n-1;++i)  
    {  
     r1=go(el[i].e1);  
     r2=go(el[i].e2);  
     if (r1!=r2)  
      {  
       nr++;  
       egyesit(r1,r2,el[i].cost);  
      }  
    }  
   for (i=1;i<=k;++i)  
    {  
     scanf("%d%d",&x,&y);  
     bejar(x,1);  
     bejar(y,1);  
     printf("%lld\n",max(fin(x),fin(y)));  
     bejar(x,-1);  
     bejar(y,-1);  
    }  
   return 0;  
}