Pagini recente » Cod sursa (job #2363116) | Cod sursa (job #1798160) | Cod sursa (job #2661532) | Cod sursa (job #691959) | Cod sursa (job #1500226)
#include <stdio.h>
#include <vector>
#include <string.h>
#define MAXN 10005
using namespace std;
bool uz[MAXN];
int n, m, e, x, y, L[MAXN], R[MAXN];
vector<int> G[MAXN];
bool pairUp(int u) {
if(uz[u]) return 0;
uz[u] = 1;
for(auto x: G[u])
if(!R[x]) {
L[u] = x;
R[x] = u;
return 1;
}
for(auto x: G[u])
if(pairUp(R[x])) {
L[u] = x;
R[x] = u;
return 1;
}
return 0;
}
int main()
{
freopen("cuplaj.in", "r", stdin);
freopen("cuplaj.out", "w", stdout);
scanf("%d %d %d", &n, &m, &e);
for(int i = 1; i <= e; i++) {
scanf("%d %d", &x, &y);
G[x].push_back(y);
}
bool done = 0;
while(!done) {
done = 1;
memset(uz, 0, sizeof(uz));
for(int i = 1; i <= n; i++)
if(!L[i] && pairUp(i))
done = 0;
}
vector< pair<int, int> > sol;
for(int i = 1; i <= n; i++)
if(L[i])
sol.push_back(make_pair(i, L[i]));
printf("%d\n", sol.size());
for(auto x: sol)
printf("%d %d\n", x.first, x.second);
return 0;
}