Pagini recente » Cod sursa (job #1570741) | Cod sursa (job #56771) | Cod sursa (job #1877476) | Cod sursa (job #2981780) | Cod sursa (job #2466386)
#include <fstream>
#include <stdio.h>
#include <string.h>
#include <vector>
using namespace std;
#define NMX 10500
#define FORI(i) for(vector<int>::iterator it= v[i].begin();it!=v[i].end();++it)
vector<int> v[NMX];
int a[NMX],b[NMX];
bool vis[NMX];
int n,m,e;
bool match(int nod)
{
if(vis[nod])return 0;
vis[nod]=1;
FORI(nod)
if(!b[*it])
{
b[*it]=nod;
a[nod]=*it;
return 1;
}
FORI(nod)
if(match(b[*it]))
{
b[*it]=nod;
a[nod]=*it;
return 1;
}
return 0;
}
int main()
{
freopen("cuplaj.in","r",stdin);
freopen("cuplaj.out","w",stdout);
scanf("%d %d %d",&n,&m,&e);
while(e--)
{
int j,k;
scanf("%d %d",&j,&k);
v[j].push_back(k);
}
int cuplaj=0;
for(int change=1;change;)
{
change=0;
memset(vis,0,n+1);
for(int i=1;i<=n;i++)
if(!a[i])
change|=match(i);
}
for(int i=1;i<=n;i++)
if(a[i]>0)cuplaj++;
printf("%d\n",cuplaj);
for(int i=1;i<=n;i++)
if(a[i]>0)
printf("%d %d\n",i,a[i]);
}