#include #define MAX_N 102400 // massimo numero di incroci che potrebbero capitarmi #define MAX_DEG 1024 // massimo grado per nodo (deciso a priori) using namespace std; int Adiacenti[MAX_N][MAX_DEG]; // lista di adiacenza, int nAdj[MAX_N]; // con vettore dei gradi per ogni nodo int Visitato[MAX_N]; // vettore che mi ricorda cosa ho gia' visitato int MigliorPerc[MAX_N]; // vettore con i percorsi piu' lunghi a partire da ogni nodo int N; int visitaeconta(int v) // visita che nel contempo restituisce la lunghezza { // del piu' lungo percorso da v in poi int max = 0, temp; Visitato[v] = 1; // mi visito, poi per ogni adiacente for (int i=0; i max) max = temp; // e mi tengo il massimo dei percorsi partenti dagli adiacenti } MigliorPerc[v] = max+1; return MigliorPerc[v]; // il mio percorso massimo sara' quello trovato +1 } int main() { int M, a, b; cin >> N >> M; for (int i=0; i> a >> b; a--, b--; Adiacenti[a][nAdj[a]++] = b; // aggiungo b in fondo alla lista di adiacenti di a } cout << visitaeconta(0) << endl; // calcolo il massimo percorso partendo da 0 e lo stampo return 0; }