Pagini recente » Cod sursa (job #1967862) | Cod sursa (job #1967431) | Cod sursa (job #1298062) | Cod sursa (job #1800384) | Cod sursa (job #1970323)
#include <cstdio>
#include <vector>
#include <algorithm>
#include <cstring>
using namespace std;
const char iname[] = "cuplaj.in";
const char oname[] = "cuplaj.out";
#define NMAX 10005
vector <int> G[NMAX];
int l[NMAX],r[NMAX],viz[NMAX];
int pairup(int nod)
{
if(viz[nod]) return 0;
viz[nod] = 1;
for(int i = 0;i<G[nod].size();i++)
if(!r[G[nod][i]])
{
l[nod] = G[nod][i];
r[G[nod][i]] = nod;
return 1;
}
for(int i =0;i< G[nod].size();i++)
if(pairup(r[G[nod][i]]))
{
l[nod] = G[nod][i];
r[G[nod][i]] = nod;
return 1;
}
return 0;
}
int main(void)
{
int n,m,e,a,b;
freopen(iname, "r", stdin);
freopen(oname, "w", stdout);
scanf("%d%d%d",&n,&m,&e);
for(;e--;)
{
scanf("%d%d",&a,&b);
G[a].push_back(b);
}
int cuplaj = 0;
for(int i=1;i<=n;i++)
if(!l[i])
if(!pairup(i))
{
memset(viz,0,sizeof(viz));
cuplaj += pairup(i);
}
else
cuplaj++;
printf("%d\n",cuplaj);
for(int i=1;i<=n;i++)
if(l[i]) printf("%d %d\n",i,l[i]);
}