Pagini recente » Cod sursa (job #3246480) | Cod sursa (job #1883947) | Cod sursa (job #1946030) | Cod sursa (job #2406120) | Cod sursa (job #1414632)
#include<cstdio>
#include<vector>
#include<cstring>
#include<algorithm>
using namespace std;
vector <int> a[10005];
int l[10005], r[10005], u[10005], n, m, e, i, x, y, sol;
bool change;
int pairup(int poz) {
vector <int>::iterator it;
if (u[poz]) return 0;
u[poz] = 1;
for (it=a[poz].begin();it!=a[poz].end();it++) if (!r[*it]) {
l[poz] = *it;
r[*it] = poz;
return 1;
}
for (it=a[poz].begin();it!=a[poz].end();it++) if (pairup(r[*it])) {
l[poz] = *it;
r[*it] = poz;
return 1;
}
return 0;
}
int main() {
freopen("cuplaj.in", "r", stdin);
freopen("cuplaj.out", "w", stdout);
scanf("%d %d %d", &n, &m, &e);
for (i=1;i<=e;i++) {scanf("%d %d", &x, &y); a[x].push_back(y);}
change=true;
while (change) {
change=false;
memset(u, 0, sizeof(u));
for (i=1;i<=n;i++) if (!l[i]) {if (pairup(i)==true) change=true;}
}
sol=0;
for (i=1;i<=n;i++) if (l[i]>0) sol++;
printf("%d\n", sol);
for (i=1;i<=n;i++) if (l[i] > 0)
printf("%d %d\n", i, l[i]);
return 0;
}