Cod sursa(job #2604887)

Utilizator matthriscuMatt . matthriscu Data 23 aprilie 2020 19:41:38
Problema Arbori de intervale Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.66 kb
#include <cstdio>
#include <algorithm>
#define INF 1e9
using namespace std;

struct elem {
    int index, cost;
};

bool operator<(const elem &a, const elem &b) {
    return a.cost < b.cost;
}

int main() {
    int n, m, t, i, j, k, x, y, c, cmin, a[105][105], rf[105][105];
    elem val[105];

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

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

    for(i = 1; i <= n; ++i) {
        scanf("%d", &val[i].cost);
        val[i].index = i;
    }

    for(i = 1; i <= n; ++i)
        for(j = 1; j <= n; ++j) {
            if(i != j)
                a[i][j] = INF;
            else
                a[i][j] = 0;
        }

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

    sort(val+1, val+n+1);

    for(cmin = 1; cmin < n; ++cmin) {
        for(i = 1; i <= n; ++i)
            for(j = 1; j <= n; ++j)
                rf[i][j] = a[i][j];

        for(k = cmin; k <= n; ++k) {
            for(i = cmin; i <= n; ++i)
                for(j = cmin; j <= n; ++j)
                    if(rf[val[i].index][val[j].index] > rf[val[i].index][val[k].index] + rf[val[k].index][val[j].index])
                        rf[val[i].index][val[j].index] = rf[val[i].index][val[k].index] + rf[val[k].index][val[j].index];

            for(i = cmin; i <= k; ++i)
                for(j = cmin; j <= k; ++j)
                    if(rf[val[i].index][val[j].index] == t) {
                        printf("%d %d %d %d", val[i].index, val[j].index, val[cmin].cost, val[k].cost);
                        return 0;
                    }
        }
    }
}