Cod sursa(job #161030)

Utilizator tm_raduToma Radu tm_radu Data 17 martie 2008 15:57:17
Problema Pitici Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.23 kb
#include <stdio.h>

int n, m, k;
int i, j, h, g;
int nr[1001][5001];
typedef struct nod {
    int vf, cost;
    nod* urm;
} NOD, *PNOD;
PNOD l[1001];

void Add(int i, int j, int h);
int Calc(int nod, int cost);    

int main()
{
    freopen("pitici.in", "r", stdin);
    freopen("pitici.out", "w", stdout);
    scanf("%d %d %d", &n, &m, &k);
    for ( h = 1; h <= m; h++ )
        scanf("%d %d %d", &i, &j, &g),
        Add(j, i, g);
    
    for ( j = 0; j <= 5000; j++ )
        Calc(n, j);
        
    int afis = 0;
    for ( j = 0; j <= 5000; j++ )
    {
        for ( i = 1; i <= nr[n][j] && i <= k; i++ )
            if ( afis == 0 ) printf("%d", j), afis = 1;
            else             printf(" %d", j);
        k -= nr[n][j];
        if ( k <= 0 ) break;
    }
    printf("\n");
    return 0;
}

void Add(int i, int j, int h)
{
    PNOD q = new NOD;
    q->vf = j;
    q->cost = h;
    q->urm = l[i];
    l[i] = q;
}

int Calc(int nod, int cost)
{
    if ( nod == 1 && cost == 0 ) return 1;
    if ( nod == 1 && cost != 0 ) return 0;
    nr[nod][cost] = 0;
    for ( PNOD q = l[nod]; q; q = q->urm )
        nr[nod][cost] += Calc(q->vf, cost-(q->cost));
    return nr[nod][cost];
}