Cod sursa(job #397281)

Utilizator lamez0rBogdan Bondor lamez0r Data 16 februarie 2010 19:00:26
Problema PScNv Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.06 kb
#include<stdio.h>
long n,m,x,y;
FILE *f;

struct muchie {
		long a,b,c;
		}v[500000];

void read ()
	{
	long i;
	f=fopen("pscnv.in","r");
	fscanf(f,"%ld%ld%ld%ld",&n,&m,&x,&y);
	for (i=1;i<=m;++i)
		fscanf(f,"%ld%ld%ld",&v[i].a,&v[i].b,&v[i].c);
	fclose(f);
	}

void quick (long s, long d)
	{
	long m=(s+d)/2,i=s,j=d,x;
	x=v[m].c;
	muchie aux;
	while (i<=j)
		{
		while (v[i].c<x)
			i++;
		while (x<v[j].c)
			j--;
		if (i<=j)
			{
			aux=v[i];
			v[i]=v[j];
			v[j]=aux;
			i++;
			j--;
			}
		}
	if (s<j)
		quick(s,j);
	if (i<d)
		quick(i,d);
	}

void solve ()
	{
	long i,c[500000],j,min,max;
	for (i=1;i<=n;++i)
		c[i]=i;
	i=1;
	while (c[x]!=c[y])
		{
		if (c[v[i].a]<c[v[i].b])
			{
			min=c[v[i].a];
			max=c[v[i].b];
			c[v[i].b]=min;
			}
		else
			{
			min=c[v[i].b];
			max=c[v[i].a];
			c[v[i].a]=min;
			}
		for (j=1;j<=n;++j)
			if (c[j]==max)
				c[j]=min;
		++i;
		}
	f=fopen("pscnv.out","w");
	fprintf(f,"%ld",v[i-1].c);
	fclose(f);
	}

int main ()
{
read();
quick(1,m);
solve ();
return 0;
}