#include #define MAXN 100 int N; int nasl[MAXN][MAXN], outdeg[MAXN]; int prev[MAXN][MAXN], indeg[MAXN]; /* SSK */ int komp[MAXN], nkomp; int time; int num[MAXN], lowlink[MAXN]; int Z[MAXN], nZ; /* Tarjanuv algoritmus pro hledani SSK */ void find(int v) { int i; lowlink[v]=num[v]=++time; Z[nZ++]=v; for (i=0; ilowlink[x]) lowlink[v]=lowlink[x]; } else if (!komp[x]) { if (num[x]=num[v]) { nZ--; komp[x]=nkomp; } } } } void komponenty() { int i; for (i=0; iy, nastavme pro * jednoduchost nasl{x} = -1; */ } void predchudci() { /* Naplni pole 'prev' a 'indeg'... */ } int col[MAXN]; /* barva vrcholu, 0-nic, 1-vpred, 2-vzad*/ void MEG_faktor() { int Q[MAXN], r, w; /* fronta */ int i, j, k, x, y; for (k=1; k<=nkomp; k++) { for (i=0; ix */ nasl[i][j] = -1; } } } } void MEG_SSK() { /* Backtrack v ramci jedne silne souvisle komponenty */ /* Pro kratkost zdrojaku neuvadim, zkuste si napsat * jako cviceni. Hrany opet rusime tak, ze jako cilovy * vrchol nastavime -1. */ } void nacti() { int m; scanf("%d%d", &N, &m); while (m--) { int x,y; scanf("%d%d", &x, &y); x--, y--; nasl[x][outdeg[x]++] = y; } } void vypis() { int i, j; printf("Je treba zachovat tato potrubi: "); for (i=0; i %d\n", i+1, nasl[i][j]+1); } } int main(void) { nacti(); komponenty(); nasobnosti(); predchudci(); MEG_faktor(); MEG_SSK(); vypis(); return 0; }