Guest User

Untitled

a guest
Dec 17th, 2017
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.16 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3.  
  4. vector< vector<bool> > grafo,grafo2;
  5. vector<int> valor;
  6. stack<int> caminho;
  7. int n,nivel=0,busca,total=0;
  8.  
  9. int getFilho(int pai){
  10. for(int cont=0;cont<n;cont++){
  11. if(grafo2[pai][cont] == true || grafo2[cont][pai] == true)
  12. return cont;
  13. }
  14. return -1;
  15. }
  16.  
  17. void dfs(int atual){
  18. int filho = getFilho(atual);
  19.  
  20. if(valor[atual] == busca){
  21. total+=nivel;
  22. valor[atual] = -1;
  23.  
  24. }else if(filho != -1){
  25. grafo2[atual][filho] = false;
  26. grafo2[filho][atual] = false;
  27. caminho.push(atual);
  28. nivel++;
  29. dfs(filho);
  30.  
  31. }else if(!caminho.empty()){
  32. int pai = caminho.top();
  33. caminho.pop();
  34. nivel--;
  35. dfs(pai);
  36. }
  37. }
  38.  
  39.  
  40. int main(){
  41. scanf("%d",&n);
  42. for(int cont=0;cont<n;cont++){
  43. grafo.push_back(vector<bool>(n,false));
  44. }
  45.  
  46. for(int cont=0;cont<n;cont++){
  47. int val;
  48. scanf("%d",&val);
  49. valor.push_back(val);
  50. }
  51.  
  52. for(int cont=0;cont<n-1;cont++){
  53. int x,y;
  54. scanf("%d%d",&x,&y);
  55. x--;
  56. y--;
  57. grafo[x][y] = true;
  58. grafo[y][x] = true;
  59. }
  60.  
  61. for(int cont=0;cont<n;cont++){
  62. if(valor[cont] != -1){
  63. grafo2 = grafo;
  64. nivel = 0;
  65. busca = valor[cont];
  66. valor[cont] =-1;
  67. dfs(cont);
  68. }
  69. }
  70. printf("%d\n",total );
  71.  
  72.  
  73. return 0;
  74. }
Add Comment
Please, Sign In to add comment