Cod sursa(job #7215)

Utilizator AlxCojocaru Alexandru Alx Data 21 ianuarie 2007 13:07:09
Problema Radiatie Scor 10
Compilator cpp Status done
Runda preONI 2007, Runda 1, Clasele 11-12 Marime 1.25 kb
#include <stdio.h>
using namespace std;
int s[30000],n,m,k,x[30000],y[30000];
long c[30000],c1[30001],afis[30001];
void drum(int sursa)
{
 int i,st[30000],nr,max;
 for (i=1;i<=n;i++)
  c1[i]=0;
 st[0]=sursa;
 nr=1;
 while (nr>0)
 {
  for (i=0;i<k;i++)
  {
   if (x[i]==st[0])
   {
    max=c[i]>c1[st[0]] ? c[i] : c1[st[0]];
    if (c1[y[i]]==0||c1[y[i]]>max)
    {
     c1[y[i]]=max;
     st[nr]=y[i];
     nr++;
    }
   }
   if (y[i]==st[0])
   {
    max=c[i]>c1[st[0]] ? c[i] : c1[st[0]];
    if (c1[x[i]]==0||c1[x[i]]>max)
    {
     c1[x[i]]=max;
     st[nr]=x[i];
     nr++;
    }
   }
  }
  for (i=0;i<nr-1;i++)
   st[i]=st[i+1];
  nr--;
 }
}
int main()
{
 int i,a[15000][2],sursa;
 freopen("radiatie.in","r",stdin);
 freopen("radiatie.out","w",stdout);
 scanf("%d %d %d\n",&n,&m,&k);
 for (i=0;i<m;i++)
  scanf("%d %d %ld\n",&x[i],&y[i],&c[i]);
 for (i=0;i<k;i++)
  scanf("%d %d",&a[i][0],&a[i][1]);
 int k2=k;
 while (k2>0)
 {
  sursa=0;
  for (i=0;i<k;i++)
  {
   if (sursa==0&&s[a[i][0]]==0)
   {
    s[a[i][0]]=1;
    sursa=a[i][0];
    drum(sursa);
   }
   if (a[i][0]==sursa)
   {
    afis[i]=c1[a[i][1]];
    k2--;
   }
  }
 }
 for (i=0;i<k;i++)
  printf("%ld\n",afis[i]);
 return 0;
}