#include #define MAX_N 102400 // massimo numero di zone 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 Funghi[MAX_N]; // vettore con la quantita' di funghi per nodo int N; int visitaeconta(int v) // visita che nel contempo restituisce il maggior numero di { // funghetti prendibili da v in poi int max = 0, temp; Visitato[v] = 1; // mi visito, poi per ogni adiacente non visitato for (int i=0; i max) max = temp; // e mi tengo il massimo. } return Funghi[v]+max; // io posso prendere i miei funghetti piu' il massimo degli adj. } int main() { int a, b; cin >> N; for (int i=0; i> Funghi[i]; } for (int i=0; i> a >> b; a--, b--; Adiacenti[a][nAdj[a]++] = b; // aggiungo b in fondo alla lista di adiacenti di a Adiacenti[b][nAdj[b]++] = a; // e viceversa } cout << visitaeconta(0) << endl; // calcolo il massimo raccolto partendo da 0 e lo stampo return 0; }