Pagini recente » Cod sursa (job #2123934) | Cod sursa (job #2499212) | Cod sursa (job #705299) | Cod sursa (job #1338488) | Cod sursa (job #1394571)
#include <fstream>
#include <vector>
#define MAXV 10001
using namespace std;
ifstream in("cuplaj.in");
ofstream out("cuplaj.out");
int L, R, E;
vector <int> G[MAXV];
int lMatch[MAXV];
int solLMatch[MAXV];
int m = 0;
int M = 0;
inline void readAndBuild() {
in >> L >> R >> E;
int x, y;
for (int e = 0; e < E; ++ e) {
in >> x >> y;
G[x].push_back(y);
}
}
inline void backtracking(int node) {
if (node > L) {
if (M < m) {
M = m;
for (int i = 1; i <= R; ++ i) {
solLMatch[i] = lMatch[i];
}
}
} else {
for (vector <int>::iterator it = G[node].begin(); it != G[node].end(); ++ it) {
if (lMatch[*it] == 0) {
lMatch[*it] = node;
m ++;
backtracking(node + 1);
m --;
lMatch[*it] = 0;
}
}
backtracking(node + 1);
}
}
inline void printResult() {
out << M << '\n';
for (int i = 1; i <= R; ++ i) {
if (solLMatch[i]) {
out << solLMatch[i] << ' ' << i << '\n';
}
}
}
int main() {
readAndBuild();
backtracking(1);
printResult();
return 0;
}