Pagini recente » Cod sursa (job #987257) | Profil Ion_Diana_Gabriela_Stefania_325CC | Cod sursa (job #392605) | Cod sursa (job #2742663) | Cod sursa (job #1244231)
#include<cstdio>
#include<vector>
using namespace std;
int n, m, K, st[10009], dr[10009], C[10009];
vector < int > v[10009];
bool cupl (int nod)
{
if (C[nod]) return 0;
C[nod] = 1;
for (vector < int > :: iterator it = v[nod].begin(); it != v[nod].end(); it ++)
if ( st[*it] == 0 )
{
st[*it] = nod;
dr[nod] = *it;
return 1;
}
for (vector < int > :: iterator it = v[nod].begin(); it != v[nod].end(); it ++)
if ( st[*it] != 0 && cupl (st[*it]) )
{
st[*it] = nod;
dr[nod] = *it;
return 1;
}
return 0;
}
int main()
{
freopen ("cuplaj.in", "r", stdin);
freopen ("cuplaj.out", "w", stdout);
scanf ("%d %d %d", &n, &m, &K);
for (int i=1; i<=K; i++)
{
int X, Y;
scanf ("%d %d", &X, &Y);
v[X].push_back(Y);
}
int cup = 1;
while (cup)
{
cup = 0;
for (int i=1; i<=n; i++)
C[i] = 0;
for (int i=1; i<=n; i++)
if (dr[i] == 0) cup += cupl (i);
}
cup = 0;
for (int i=1; i<=n; i++)
if (dr[i]) cup ++;
printf ("%d\n", cup);
for (int i=1; i<=n; i++)
if (dr[i]) printf ("%d %d\n", i, dr[i]);
return 0;
}