Pagini recente » Cod sursa (job #1027236) | Cod sursa (job #2206926) | Cod sursa (job #662304) | Cod sursa (job #77874) | Cod sursa (job #1416246)
#include <cstdio>
#include <algorithm>
#include <vector>
#include <cstring>
using namespace std;
#define inFile "pitici.in"
#define outFile "pitici.out"
#define MAX_N 1020
#define MAX_M 200020
struct edge {
int other;
int cost;
};
vector < edge > adjNext[MAX_N];
vector < edge > adjPrev[MAX_N];
int D[MAX_N][MAX_N];
int K;
int getWays(int Node, int Length) {
if(D[Node][Length] != -1) return D[Node][Length];
int i;
D[Node][Length] = 0;
for(i = 0; i < adjPrev[Node].size(); i++) {
D[Node][Length] += getWays(adjPrev[Node][i].other, Length - adjPrev[Node][i].cost);
if(D[Node][Length] > K) D[Node][Length] = K;
}
return D[Node][Length];
}
int main() {
FILE *in = fopen(inFile, "r");
FILE *out = fopen(outFile, "w");
int N, M, i, j, a, b, c;
memset(D, -1, sizeof(D[0][0]) * MAX_N * MAX_N);
fscanf(in, "%d %d %d", &N, &M, &K);
for(i = 1; i <= M; i++) {
fscanf(in, "%d %d %d", &a, &b, &c);
adjNext[a].push_back( {b,c} );
adjPrev[b].push_back( {a,c} );
}
for(i = 1; i <= N; i++) D[i][0] = 1;
for(i = 1; i <= N; i++) {
for(j = 1; j <= N; j++) {
D[i][j] = getWays(i,j);
}
}
for(i = 1; D[N][i] == -1; i++);
while(K) {
for(j = 1; j <= min(D[N][i], K); j++)
fprintf(out, "%d\n", i);
K -= D[N][i];
i++;
}
return 0;
}