Cod sursa(job #283934)

Utilizator savimSerban Andrei Stan savim Data 20 martie 2009 19:28:32
Problema Pitici Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.54 kb
#include <stdio.h>
#include <algorithm>
#include <vector>
#include <string.h>

using namespace std;

#define MAX_N 1024

int n, m, k, i, j, p, q, c, val, fiu, cost;
vector <int> A[MAX_N], C[MAX_N];
int v[MAX_N][MAX_N], aux[MAX_N * MAX_N];

char s[50];

void pars() {
    fgets(s, 50, stdin);

    j = 0; p = q = c = 0;
    while (s[j] != ' ') {
        p = p * 10 + s[j] - '0';
        ++j;
    }
    ++j;

    while (s[j] != ' ') {
        q = q * 10 + s[j] - '0';
        ++j;
    }
    ++j;

    while ('0' <= s[j] && s[j] <= '9') {
        c = c * 10 + s[j] - '0';
        ++j;
    }
}

void cit() {
    freopen("pitici.in", "r", stdin);
    freopen("pitici.out", "w", stdout);

    scanf("%d %d %d\n", &n, &m, &k);
    for (i = 1; i <= m; ++i) {
        //aici parsez citirea
        pars();

        A[p].push_back(q);
        C[p].push_back(c);
    }
}

void solve() {
    v[n][0] = 1;

    for (i = n - 1; i >= 1; --i) {
        int len = A[i].size();

        aux[0] = 0;
        for (j = 0; j < len; ++j) {
            fiu = A[i][j];  cost = C[i][j];
            for (p = 1; p <= v[fiu][0]; ++p) {
                ++aux[0];
                aux[aux[0]] = v[fiu][p] + cost;
            }
        }

        sort(aux + 1, aux + aux[0] + 1);

        for (j = 1; j <= aux[0]; ++j)
            if (j > k) break;
            else v[i][++v[i][0]] = aux[j];
    }
}

void write() {
    for (i = 1; i <= v[1][0]; ++i)
        if (i > k) break;
        else printf("%d ", v[1][i]);
    printf("\n");
}

int main() {

    cit();
    solve();
    write();

    return 0;
}