#include #include #include #include typedef std::vector< std::vector > Graph; int recurse(Graph &graph, bool* todo, int j, int N, std::vector &members) { if (!todo[j]) return 0; todo[j] = false; members.push_back(j); int total = 1; for (int k = 0; k < N; k++) { if (graph[j][k]) { total += recurse(graph, todo, k, N, members); } } return total; } int main(int argc, char const *argv[]) { int C; std::cin >> C; for (int i = 0; i < C; ++i) { int N, M; std::cin >> N; std::cin >> M; N *= 2; Graph graph(N, std::vector(N)); for (int j = 0; j < N; j++) { for(int k = 0; k < N; k++) { graph[j][k] = (j != k); } } for (int j = 0; j < M; j++) { int A, B; std::cin >> A; std::cin >> B; A--; B--; if (A == N || B == N) { std::cerr << "too high" << std::endl; } graph[A][B] = false; graph[B][A] = false; } std::list groups; std::list< std::vector > group_members; int temp = N; bool todo[N]; for(int j = 0; j < N; j++) { if (!todo[j]) continue; group_members.emplace_back(std::vector()); groups.push_back(recurse(graph, todo, j, N, group_members.back())); } for (int c : groups) { std::cout << "group: " << c << std::endl; } /* code */ } return 0; }