#include #include #include using namespace std; int N, A[50]; int V; vector G[100]; int match[100]; bool used[100]; void add_edge(int u, int v){ G[u].push_back(v); G[v].push_back(u); } bool dfs(int v){ used[v] = true; for(int u : G[v]){ int w = match[u]; if(w < 0 || (!used[w] && dfs(w))){ match[v] = u; match[u] = v; return true; } } return false; } int bipartite_matching(){ int res = 0; memset(match, -1, sizeof(match)); for(int v=0;v> N; for(int i=0;i> A[i]; } V = N * 2; for(int i=0;i