Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- ifstream in("input.txt");
- ofstream out("output.txt");
- int main(){
- int n;
- in>>n;
- vector<int> dis(n, 0), legami; //vettore distanze e legami
- vector<vector<int> > lista(n); //lista di adiacenza per il grafo
- queue<int> coda; //coda per la bfs
- vector<bool> visitati(n, false); //vettore visitati per la bfs
- legami.push_back(0); //inserisco il primo legame (zeus -> non ne ha)
- for(int i = 1; i < n; i++){
- char r_type; //tipo di relazione
- int id_padre, peso;
- in >> r_type;
- in >> id_padre;
- if(r_type == 'B') peso = 3;
- else if(r_type == 'N') peso = 2;
- else peso = 1;
- legami.push_back(peso); //inserisco il nuovo legame dell'iesimo verso il parente
- lista[id_padre].push_back(i); //carico il collegamento nel grafo
- }
- coda.push(0); //carico la coda per la bfs
- while(!coda.empty()){ //finchè contiene elementi
- int corrente = coda.front(); //estraggo il primo
- if(!visitati[corrente]){ //se non l'ho visitato
- visitati[corrente] = true; //lo setto a visitato
- for(int i = 0; i < lista[corrente].size(); i++){ //per ogni nodo adiacente
- int next = lista[corrente][i]; //prendo il nodo adiacente
- coda.push(next); //lo inserisco nella coda
- if(!visitati[next]) dis[next] = dis[corrente] + legami[next]; //inserisco la sua distanza
- }
- }
- coda.pop(); //elimino l'elemento dalla coda
- }
- out << *max_element(dis.begin(), dis.end()); //cerco il massimo
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment