diff --git a/libs/jogador.c b/libs/jogador.c
index d9fc9efcf20c4634fb2732532923e3d24f47a601..ddda7c25501508e3125f3debd9d368b32b9fa755 100644
--- a/libs/jogador.c
+++ b/libs/jogador.c
@@ -30,9 +30,9 @@ Lista Joga(Grafo g, Lista grupo){
     return jogadas;
 }
 
-Lista filhosGrupo(Lista l) {
+Lista filhosGrupo(Lista grupoPai) {
     Lista filhos = constroiLista();
-    for(No n = primeiroNoLista(l); n; n = getSucessorNo(n)) {
+    for(No n = primeiroNoLista(grupoPai); n; n = getSucessorNo(n)) {
         Vertice pai = (Vertice) getConteudo(n);
         for(No m = primeiroNoLista(pai->filhos); m; m = getSucessorNo(m)) {
             Vertice filho = (Vertice) getConteudo(m);
@@ -42,9 +42,21 @@ Lista filhosGrupo(Lista l) {
     return filhos;
 }
 
-Lista agrupaCores(Lista l) {
+int calculaBonus(Vertice v, Lista filhos) {
+    int bonus = 0;
+    for(No n = primeiroNoLista(v->filhos); n; n = getSucessorNo(n)) {
+        Vertice filho = getConteudo(n);
+        // Se o filho não está na lsita filhos e não está no grupo de vértices já consumidos
+        if(!pertenceLista(filho, filhos) && !filho->grupo) {
+            bonus += filho->peso;
+        }
+    }
+    return bonus;
+}
+
+Lista agrupaCores(Lista filhos) {
     Lista agrupa = constroiLista();
-    for(No n = primeiroNoLista(l); n; n = getSucessorNo(n)) {
+    for(No n = primeiroNoLista(filhos); n; n = getSucessorNo(n)) {
         Vertice v = (Vertice) getConteudo(n);
         // Verifica se a cor já está na lista
         bool estaNaLista = false;
@@ -53,6 +65,7 @@ Lista agrupaCores(Lista l) {
             // Se está, soma o peso do vértice
             if(w->cor == v->cor) {
                 w->peso += v->peso;
+                w->bonus += calculaBonus(v, filhos);
                 estaNaLista = true;
             }
         }
@@ -61,6 +74,7 @@ Lista agrupaCores(Lista l) {
             Vertice w = criaVertice();
             w->cor = v->cor;
             w->peso = v->peso;
+            w->bonus = calculaBonus(v, filhos);
             insereLista(w, agrupa);
         }
     }
diff --git a/libs/jogador.h b/libs/jogador.h
index a5470c40cb320f31d605ae1af70923460d54cb2d..9ce33604177f480c87069a5bb21eef08a68dd86c 100644
--- a/libs/jogador.h
+++ b/libs/jogador.h
@@ -10,8 +10,8 @@
 Lista Joga(Grafo g, Lista grupo);
 
 // Retorna todos os filhos de uma lista de vértices
-Lista filhosGrupo(Lista l);
+Lista filhosGrupo(Lista grupoPai);
 
 // Retorna uma lista de vértices com as cores e pesos agrupadas a partir de l
-Lista agrupaCores(Lista l);
+Lista agrupaCores(Lista filhos);
 #endif