Pagini recente » Cod sursa (job #1309656) | Cod sursa (job #1701016) | Cod sursa (job #1073085) | Cod sursa (job #1435429) | Cod sursa (job #3335817)
#include <fstream>
#include <vector>
#include <cstring>
using namespace std;
ifstream cin("cuplaj.in");
ofstream cout("cuplaj.out");
const int NMAX = 10005;
vector<int> adj[NMAX];
int match[NMAX];
bool vis[NMAX];
bool dfs(int node) {
for(const int v : adj[node]) {
if(vis[v]) continue;
vis[v] = true;
if(match[v] == 0 || dfs(match[v])) {
match[v] = node;
return true;
}
}
return false;
}
int main() {
int n, m, k;
cin >> n >> m >> k;
for(int i = 0; i < k; i++) {
int a, b;
cin >> a >> b;
adj[a].push_back(b);
}
memset(match, 0, sizeof(match));
int cuplaje = 0;
for(int i = 1; i <= n; i++) {
memset(vis, false, sizeof(vis));
if(dfs(i)) {
cuplaje++;
}
}
cout << cuplaje << '\n';
for(int i = 1; i <= m; i++) {
if(match[i]) {
cout << match[i] << " " << i << '\n';
}
}
return 0;
}