Pagini recente » Cod sursa (job #2706957) | Cod sursa (job #1099665) | Cod sursa (job #1634246) | Cod sursa (job #2487747) | Cod sursa (job #1538120)
#include <stdio.h>
#include <cstring>
#include <vector>
#define nmax 10010
using namespace std;
int n,m,i,j,x,y,nr,l[nmax],r[nmax];
vector <int> g[nmax]; bool fr[nmax];
bool ok;
bool makpair(int nod)
{
if (fr[nod]) return false;
fr[nod]=true;
for (unsigned int i=0;i<g[nod].size();i++)
if (r[g[nod][i]]==0) {
l[nod]=g[nod][i];
r[g[nod][i]]=nod;
return true;
}
for (unsigned int i=0;i<g[nod].size();i++)
if (makpair(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 (i=1;i<=nr;i++) {
scanf("%d %d",&x,&y);
g[x].push_back(y);
}
ok=true;
while (ok) {
ok=false;
memset(fr,0,sizeof(fr));
for (i=1;i<=n;i++)
if (l[i]==0) ok=ok|makpair(i);
}
nr=0;
for (i=1;i<=n;i++)
if (l[i]>0) nr++;
printf("%d\n",nr);
for (i=1;i<=n;i++)
if (l[i]>0) printf("%d %d\n",i,l[i]);
return 0;
}