Pagini recente » Cod sursa (job #1944493) | Cod sursa (job #2185407) | Cod sursa (job #1803563) | Cod sursa (job #276609) | Cod sursa (job #445336)
Cod sursa(job #445336)
#include <stdio.h>
#include <string.h>
#include <vector>
using namespace std;
int n1, n2, m, viz[10002], cuplaj[10002], c[10002];
vector <int> v[10002];
int cupleaza (int nod)
{
if (viz[nod])
return 0;
viz[nod] = 1;
vector <int> :: iterator it;
for (it = v[nod].begin(); it != v[nod].end(); it ++)
if (!cuplaj[*it])
{
cuplaj[*it] = nod;
return 1;
}
for (it = v[nod].begin(); it != v[nod].end(); it ++)
if (cupleaza (cuplaj[*it]))
{
cuplaj[*it] = nod;
return 1;
}
return 0;
}
int main()
{
freopen ("cuplaj.in", "r", stdin);
freopen ("cuplaj.out", "w", stdout);
scanf ("%d %d %d", &n1, &n2, &m);
int i, x, y;
for (i = 1; i <= m; i ++)
{
scanf ("%d %d", &x, &y);
v[x].push_back (y);
}
int ok = 1;
while (ok)
{
ok = 0;
memset (viz, 0, sizeof (viz));
for (i = 1; i <= n1; i ++)
if (!c[i] && cupleaza (i))
{
c[i] = 1;
ok = 1;
}
}
int nr = 0;
for (i = 1; i <= n2; i ++)
nr += cuplaj[i] != 0;
printf ("%d\n", nr);
for (i = 1; i <= n2; i ++)
if (cuplaj[i])
printf ("%d %d\n", cuplaj[i], i);
return 0;
}