Cod sursa(job #402200)

Utilizator cristiprgPrigoana Cristian cristiprg Data 23 februarie 2010 17:02:27
Problema Radiatie Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.35 kb
#include <cstdio>
#define DIM 15005
const int INF = 1<<30;
struct nod
{
    int x, cost;
    nod *next;
};

nod *G[DIM];
int n, m, k, vs[DIM], vd[DIM], Min = INF, v[DIM];

void addMuchie(int i, int j, int c)
{
    nod *p = new nod;
    p -> x = j;
    p -> cost = c;
    p -> next = G[i];
    G[i] = p;
}

void read()
{
    FILE *f = fopen("radiatie.in", "r");
    fscanf(f, "%d%d%d", &n, &m, &k);
    for (int x, y, c;m;--m)
    {
        fscanf(f, "%d%d%d", &x, &y, &c);
        addMuchie(x, y, c);
        addMuchie(y, x, c);
    }
    for (int i = 1; i <= k; ++i)
        fscanf(f, "%d%d", &vs[i], &vd[i]);

    fclose(f);
}

void DFS(int i, int d, int lmax)
{
    if (i == d)
    {
        if (lmax < Min)
            Min = lmax;
        return;
    }
    for (nod *p = G[i]; p; p = p->next)
        if (!v[p->x])
        {
            if (p->cost > Min)  continue;
            v[p->x] = 1;
            DFS(p->x, d, (p->cost) < lmax ? lmax : (p->cost));
            v[p->x] = 0;
        }
}

FILE *f = fopen("radiatie.out", "w");

void curata()
{
    for (int i = 1; i <= n; ++i)
        v[i] = 0;
    fprintf (f, "%d\n", Min);
}

void solve()
{
    for (int i = 1; i <= k; ++i)
        DFS(vs[i], vd[i], -1), curata(), Min = INF;
}

int main()
{
    read();
    solve();
    fclose(f);
    return 0;
}