Pagini recente » Cod sursa (job #281157) | Cod sursa (job #3172036) | Cod sursa (job #968826) | Cod sursa (job #2130605) | Cod sursa (job #1686152)
#include <stdio.h>
#include <cstring>
#include <algorithm>
#define nmax 10010
using namespace std;
int n,m,x,y,nr;
int r[nmax],l[nmax];
bool fr[nmax];
vector <int> g[nmax];
bool makepair(int nod)
{
if (fr[nod]) return false;
fr[nod]=true;
for (int i=0;i<(int)g[nod].size();i++)
if (r[g[nod][i]]==0) {
l[nod]=g[nod][i];
r[g[nod][i]]=nod;
return true;
}
for (int i=0;i<(int)g[nod].size();i++)
if (makepair(r[g[nod][i]])) {
l[nod]=g[nod][i];
r[g[nod][i]]=nod;
return true;
}
return false;
}
int main()
{
freopen("cuplaj.in","r",stdin);
freopen("cuplaj.out","w",stdout);
scanf("%d %d %d",&n,&m,&nr);
for (int i=1;i<=nr;i++) {
scanf("%d %d",&x,&y); g[x].push_back(y);
}
bool ok=true;
while (ok) {
memset(fr,0,sizeof(fr)); ok=false;
for (int i=1;i<=n;i++)
if (l[i]==0) ok=ok|makepair(i);
}
int nr=0;
for (int i=1;i<=n;i++)
if (l[i]>0) nr++;
printf("%d\n",nr);
for (int i=1;i<=n;i++)
if (l[i]>0) printf("%d %d\n",i,l[i]);
return 0;
}