Cod sursa(job #30492)

Utilizator mike4problemsRadu Gabriel mike4problems Data 14 martie 2007 01:27:41
Problema Radiatie Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.23 kb
#include<stdio.h>
#include<stdlib.h>

FILE *In=fopen("radiatie.in","r");
FILE *Out=fopen("radiatie.out","w");

int n,m,k;
int c[15001];
int d[15001];
int viz[15001];
int max[15001];
int i,j,ti,tj,t;

struct M{
 int i,j,c;
 }a[30001];

inline int sort(const void *a,const void*b)
 {
 return (((M*)a)->c-((M*)b)->c);
 }

int find(int k)
 {
 while(c[k])
  k=c[k];
 return k;
 }

int main()
 {
 fscanf(In,"%d%d%d",&n,&m,&k);
 for(t=0;t<m;t++)
  fscanf(In,"%d%d%d",&a[t].i,&a[t].j,&a[t].c);
 qsort(a,m,sizeof(M),sort);
 for(i=1,j=-1;i<n;i++)
  {
  for(ti=tj;ti==tj;j++,ti=find(a[j].i),tj=find(a[j].j));
  c[tj]=ti,d[tj]=a[j].c;
  }
 for(t=1;t<=k;t++)
  {
  fscanf(In,"%d%d",&i,&j);
  viz[i]=t,max[i]=0;
  while(c[i])
   {
   if(d[i]>max[i]) max[c[i]]=d[i];
   else max[c[i]]=max[i];
   i=c[i]; viz[i]=t;
   }
  if(j!=i){
  if(viz[j]==t)
   fprintf(Out,"%d\n",max[j]);
  else{
  max[j]=0;
  while(viz[c[j]]!=t)
   {
   if(d[j]>max[j]) max[c[j]]=d[j];
   else max[c[j]]=max[j];
   j=c[j];
   }
  if(d[j]>max[j]) max[j]=d[j];
  if(max[c[j]]>max[j])
   fprintf(Out,"%d\n",max[c[j]]);
  else
   fprintf(Out,"%d\n",max[j]);}}
  else
   fprintf(Out,"%d\n",max[i]);
  }
 fclose(Out);
 return 0;
 }