Az alábbi letöltési lehetőségek közül választhatsz: (
segítség)
Típus: text/plain
Tartalmaz szöveget
Karakterkódolás: utf-8
Méret: 2 KB
#include <stdio.h>
#define MaxN 10000
#define MaxK 100
struct {
int B, X;
} S[MaxN];
int N, K;
int Read (char *);
int Write (char *);
int TaskA (void);
int TaskB (int);
int main (int AN, char * Args[]) {
if (AN < 3)
return 1;
if (!Read(Args[1]))
return 1;
if (!Write(Args[2]))
return 1;
return 0;
}
int Read (char * FN) {
FILE * F = fopen(FN, "rt");
int A;
if (F == NULL)
return 0;
fscanf(F, "%d %d\n", &N, &K);
S[0].B = -1;
S[0].X = 0;
for (int I = 1; I < N; I++) {
fscanf(F, "%d %d %d\n", &A, &S[I].B, &S[I].X);
S[I].B--;
S[I].X--;
}
fclose(F);
return 1;
}
int Write (char * FN) {
FILE * F = fopen(FN, "wt");
if (F == NULL)
return 0;
fprintf(F, "%d\n", TaskA());
for (int I = 0; I < K; I++)
fprintf(F, "%d ", TaskB(I));
fprintf(F, "\n");
fclose(F);
return 1;
}
int TaskA (void) {
int Q = 0;
for (int I = 0; I < N; I++)
if (S[I].B == 0)
Q++;
return K - Q;
}
int TaskB (int X) {
int bDone[MaxN], I, M = 0, M0;
for (I = 0; I < N; I++)
bDone[I] = 0;
for (I = 0; I < N; I++)
if (S[I].B == 0 && S[I].X == X) {
bDone[I] = 1;
M++;
}
do {
M0 = 0;
for (I = 0; I < N; I++)
if (!bDone[I] && bDone[S[I].B]) {
bDone[I] = 1;
M0++;
}
M+= M0;
} while (M0);
return M == 0 ? 0 : M * K - (M - 1);
}