Pagini recente » Cod sursa (job #2552621) | Cod sursa (job #1969101) | Cod sursa (job #500728) | Cod sursa (job #2519361) | Cod sursa (job #254052)
Cod sursa(job #254052)
# include <cstdio>
# include <vector>
using namespace std;
# define FIN "cuplaj.in"
# define FOUT "cuplaj.out"
# define MAXN 10005
int N, M, E, i;
vector <int> G[MAXN];
int s[MAXN], l[MAXN], r[MAXN];
int Pairup(int N)
{
vector <int> :: iterator it;
if (s[N]) return 0;
s[N] = 1;
for (it = G[N].begin(); it != G[N].end(); ++it)
if (!r[*it])
{
l[N] = *it;
r[*it] = N;
return 1;
}
for (it = G[N].begin(); it != G[N].end(); ++it)
if (Pairup(r[*it]))
{
l[N] = *it;
r[*it] = N;
return 1;
}
return 0;
}
int main()
{
freopen(FIN,"r",stdin);
freopen(FOUT,"w",stdout);
scanf("%d %d %d",&N, &M, &E);
int a, b;
for (; E; --E)
{
scanf("%d %d",&a, &b);
G[a].push_back(b);
}
int ok = 1, card = 0;
for (; ok;)
{
ok = 0;
memset(s, 0, sizeof(s));
for (i = 1; i <= N; ++i)
if (!l[i] && Pairup(i))
ok = 1, ++card;
}
printf("%d\n", card);
for (i = 1; i <= N; ++i)
if (l[i]) printf("%d %d\n",i, l[i]);
return 0;
}