Guest User

Untitled

a guest
Feb 23rd, 2018
198
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.45 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. ifstream in("input.txt");
  4. ofstream out("output.txt");
  5. int main(){
  6. int n;
  7. in>>n;
  8. vector<int> dis(n, 0), legami; //vettore distanze e legami
  9. vector<vector<int> > lista(n); //lista di adiacenza per il grafo
  10. queue<int> coda; //coda per la bfs
  11. vector<bool> visitati(n, false); //vettore visitati per la bfs
  12. legami.push_back(0); //inserisco il primo legame (zeus -> non ne ha)
  13. for(int i = 1; i < n; i++){
  14. char r_type; //tipo di relazione
  15. int id_padre, peso;
  16. in >> r_type;
  17. in >> id_padre;
  18. if(r_type == 'B') peso = 3;
  19. else if(r_type == 'N') peso = 2;
  20. else peso = 1;
  21. legami.push_back(peso); //inserisco il nuovo legame dell'iesimo verso il parente
  22. lista[id_padre].push_back(i); //carico il collegamento nel grafo
  23. }
  24. coda.push(0); //carico la coda per la bfs
  25. while(!coda.empty()){ //finchè contiene elementi
  26. int corrente = coda.front(); //estraggo il primo
  27. if(!visitati[corrente]){ //se non l'ho visitato
  28. visitati[corrente] = true; //lo setto a visitato
  29. for(int i = 0; i < lista[corrente].size(); i++){ //per ogni nodo adiacente
  30. int next = lista[corrente][i]; //prendo il nodo adiacente
  31. coda.push(next); //lo inserisco nella coda
  32. if(!visitati[next]) dis[next] = dis[corrente] + legami[next]; //inserisco la sua distanza
  33. }
  34. }
  35. coda.pop(); //elimino l'elemento dalla coda
  36. }
  37. out << *max_element(dis.begin(), dis.end()); //cerco il massimo
  38. return 0;
  39. }
Advertisement
Add Comment
Please, Sign In to add comment