#include #include #define MAXN 100 int N; /* Počet úkonů: úkon 0 je $\alpha$, $N$ je $\omega$ */ int l[MAXN]; /* Délky úkonů */ int a[MAXN], z[MAXN]; /* Délky maximálních cest (viz popis) */ int edges[MAXN][MAXN]; /* Hrany vedoucí z jednotlivých vrcholů */ int outdeg[MAXN], indeg[MAXN]; /* Vstupní a výstupní stupeň vrcholů */ int top[MAXN]; /* Topologické pořadí vrcholů */ void add_edge(int v, int w) /* Přidá hranu do závislostního grafu */ { edges[v][outdeg[v]] = w; outdeg[v]++; indeg[w]++; } void read(void) /* Přečte vstup a vytvoří graf */ { int v, w; scanf("%d", &N); N++; /* Počet úkonů a jejich ceny */ for (v=1; v 0) /* Závislosti, ukončeny $(0,0)$ */ add_edge(v, w); for (v=1; v0; i--) { /* $z[v]$ zase pozpátku */ v = top[i]; for (j=0; j