Cod sursa(job #6934)

Utilizator adri_seceSeceleanu Adrian adri_sece Data 21 ianuarie 2007 10:58:05
Problema Radiatie Scor 0
Compilator cpp Status done
Runda preONI 2007, Runda 1, Clasele 11-12 Marime 1.36 kb
#include<stdio.h>
FILE *fin,*fout;
#define inf 32000
#define dim 15001
int a[dim][dim],d[dim],viz[dim],prec[dim],i,j,min,v1,v2;
int rez[dim],k,n,m,x[dim],y[dim],v,c,p;
int main()
{
fin=fopen("radiatie.in","rt");
fout=fopen("radiatie.out","wt");
fscanf(fin,"%d %d %d",&n,&m,&k);
for(i=1;i<=n;i++)
	for(j=1;j<=n;j++)
		a[i][j]=inf;
for(i=1;i<=m;i++)
		{
		fscanf(fin,"%d %d %d",&v1,&v2,&c);
		a[v1][v2]=a[v2][v1]=c;
		if(a[v1][v2]==0)a[v1][v2]=a[v2][v1]=inf;
		}
v1=k;
for(c=1;c<=v1;c++)
  {
	fscanf(fin,"%d %d",&x[c],&y[c]);
	if(x[c]>y[c])
		{
		v2=x[c];
		x[c]=y[c];
		y[c]=v2;
		}
	}

for(c=1;c<=v1;c++)
	if(rez[c]==0)
	{
	v=x[c];
	for(i=1;i<=n;i++)
		{
		viz[i]=0;
		prec[i]=0;
		}
	for(i=1;i<=n;i++)
		{
		d[i]=a[v][i];
		prec[i]=v;
		}
	prec[v]=0;
	viz[v]=1;
	d[v]=0;
	for(j=1;j<=n;j++)
		{
		min=inf;
		for(i=1;i<=n;i++)
			if(viz[i]==0)
				if(min>d[i])
					{
					min=d[i];
					k=i;
					}
		for(i=1;i<=n;i++)
			if(viz[i]==0)
				if(d[i]>a[k][i])
					{
					d[i]=a[k][i];
					prec[i]=k;
					}
		viz[k]=1;
		}
	for(p=1;p<=v1;p++)
		if(rez[p]==0 && x[c]==x[p])
			{
			i=y[p];
			while(prec[i]!=0)
				{
				if(a[prec[i]][i]>rez[p])
					rez[p]=a[prec[i]][i];
					i=prec[i];
				}
			}
	}
	for(i=1;i<=v1;i++)
		fprintf(fout,"%d\n",rez[i]);
fclose(fin);
fclose(fout);
return 0;

}