/* Backtracking dei possibili match. */ #include #include #include #include using namespace std; #ifdef EVAL ifstream in("input.txt"); ofstream out("output.txt"); #else istream &in(cin); ostream &out(cout); #endif // Lista di adiacenza dai nodi a sx ai nodi a dx vector > adjlist; vector match; vector current_match; vector picked; bool different_match_found = false; int N, M; void bt(int current) { if(current == N) { for(int i=0;i::iterator it = adjlist[current].begin(); it != adjlist[current].end() && !different_match_found; it++) { if(!picked[*it]) { current_match[current] = *it; picked[*it] = true; bt(current+1); picked[*it] = false; } } } } int main() { in >> N >> M; adjlist.resize(N); match.resize(N); current_match.resize(N); picked.resize(N, false); for(int i=0;i> src >> dst; adjlist[src].push_back(dst); if(i