Skip to content

Instantly share code, notes, and snippets.

@sofhiasouza
Created November 6, 2019 17:44
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save sofhiasouza/b5d43273eb7d62d75fc44ca8cf156739 to your computer and use it in GitHub Desktop.
Save sofhiasouza/b5d43273eb7d62d75fc44ca8cf156739 to your computer and use it in GitHub Desktop.
//Desenhando Labirintos - URI 1076
//Sofhia de Souza Gonçalves
#include <bits/stdc++.h>
#define pb push_back
using namespace std;
const int maxn = 55;
int t, n, v, a, vist[maxn], tempo;
vector < int > grafo[maxn];
int dfs(int x)
{
vist[x] = tempo; //marco x como visitado
int resp = 1; //comeco com 1, pois me movimento 1 para voltar pro pai no final
for(int v : grafo[x])
{
if(vist[v] == tempo) continue; //se ja visitei o vertice v nesse caso de teste, ignoro ele
resp += dfs(v) + 1; //do contrario, chamo a dfs dele e somo na resposta da subarvore de x a resposta da subarvore de v + 1
}
return resp; //retorno a resposta de toda a subarvore de x
}
int main()
{
cin >> t; //leio a quantidade de casos de teste
tempo = 1; //variavel que marca o caso de teste que estou
while(t--)
{
cin >> n >> v >> a;
for(int i = 1 ; i <= a ; i++)
{
int x, y;
cin >> x >> y;
grafo[x].pb(y); //coloco y na lista de adjacencias de x e vice-versa
grafo[y].pb(x);
}
cout << dfs(n) - 1 << "\n"; //imprimo o resultado chamando a dfs, -1 pois estava contado o movimento de chegar no primeiro
tempo++; //incremento a variavel que guarda o caso de teste, pois esse acabou
for(int i = 0 ; i < v ; i++) grafo[i].clear(); //limpo o grafo
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment