#include #include #include #include #include #include constexpr int teamsize = 15; typedef std::pair player; typedef std::vector group; typedef std::vector > graph; bool bfs(const graph &g, int s, int t, std::vector &parent) { int N = g.size(); std::vector visited(N); parent.resize(N); std::queue q; q.push(s); visited[s] = true; parent[s] = -1; while (!q.empty()) { int u = q.front(); q.pop(); for (auto v : g[u]) { if (!visited[v.first] && v.second > 0) { q.push(v.first); parent[v.first] = u; visited[v.first] = true; } } } return visited[t]; } int fordFulkerson(const graph &g, int s, int t) { int N = g.size(); graph rGraph = g; std::vector parent(N); int max_flow = 0; while (bfs(rGraph, s, t, parent)) { for (int v=t; v != s; v=parent[v]) { int u = parent[v]; rGraph[u][v] -= 1; rGraph[v][u] += 1; } max_flow += 1; } return max_flow; } bool compatible(group &g1, group &g2) { int s1 = g1.size(); int s2 = g2.size(); if(s1 + s2 != teamsize) return false; graph g(2*teamsize+2); for(int i=0; i oddgroups; std::vector evengroups; int n; std::cin >> n; for(int i=0; i> k; for(int j=0; j> a >> b; player p{a-1, b-1}; g.push_back(p); } if(k % 2) oddgroups.push_back(g); else evengroups.push_back(g); } int matches = 0; int os = oddgroups.size(); int es = evengroups.size(); std::vector used(es); for(int i=0; i