Cod sursa(job #7102)

Utilizator sims_glAlexandru Simion sims_gl Data 21 ianuarie 2007 12:30:25
Problema Radiatie Scor 30
Compilator cpp Status done
Runda preONI 2007, Runda 1, Clasele 11-12 Marime 1.02 kb
#include <stdio.h>
#include <algorithm>

using namespace std;

#define nm 15100
#define mm 30100

struct muchie
{
	int x, y, c;
};

int comp(muchie a, muchie b)
{
	return a.c < b.c;
}

int n, m, k, r[nm], vx[nm], vy[nm], sol[nm];
muchie a[mm];

int f(int x)
{
	if (r[r[x]] != r[x])
    	r[x] = f(r[x]);

    return r[x];
}

int main()
{
	int i, j;

	freopen("radiatie.in", "r", stdin);
    freopen("radiatie.out", "w", stdout);

    scanf("%d%d%d", &n, &m, &k);

    for (i = 1; i <= m; ++i)
    	scanf("%d%d%d", &a[i].x, &a[i].y, &a[i].c);

    for (i = 1; i <= k; ++i)
    	scanf("%d%d", &vx[i], &vy[i]);

    sort(a + 1, a + m + 1, comp);

	for (i = 1; i <= n; ++i)
    	r[i] = i;

    for (i = 1; i <= m; ++i)
    {
        if (f(a[i].x) != f(a[i].y))
        	r[r[a[i].x]] = r[a[i].y];

        for (j = 1; j <= k; ++j)
        	if (!sol[j] && f(vx[j]) == f(vy[j]))
            	sol[j] = a[i].c;
    }

    for (i = 1; i <= k; ++i)
    	printf("%d\n", sol[i]);
    
	return 0;
}