Algoritmul de rezolvare este:
    
    a) Pentru aflarea materiilor inutile, se face cate o parcurgere in adancime
    (dar poate fi si in latime daca tineti mortis), pornind din fiecare materie
    utila, PE GRAFUL INVERSAT, adica dintr-un nod al grafului ne mutam pe rand
    in toti predecesorii nodului, nu in succesori. Reunind nodurile atinse
    pentru parcurgerile din fiecare materie utila, obtinem multimea de materii
    utile (direct sau indirect), pe care o complementam si obtinem multimea de
    materii inutile.
    
    b) Pentru a determina toate nodurile care se afla pe un ciclu in graf,
    parcurgem graful in modul obisnuit si tinem cont ca ori de cate ori dorim
    sa ne mutam dintr-un nod intr-un alt nod in curs de vizitare, se inchide un
    ciclu. "Nod in curs de vizitare" este un nod in care s-a ajuns, dar care
    are fii inca nevizitati.
    
    Nu va pot spune mult mai mult, deoarece trebuie sa ma duc sa proiectez o
    unitate aritmetico-logica. Din pacate nu pentru cei de la Intel, ci pentru
    cei de la Poli :) Dar cititi cartile "de capatai" (de teasta, de bostan)
    in teoria grafurilor: Cormen, Ioan Tomescu, Sorin Tudor, alte manuale de
    clasa a X-a.
    
    Inca nu am ajuns la o concluzie in ce priveste complexitatea. Este
    O(M+N) ?