Pagini recente » Cod sursa (job #1962617) | Cod sursa (job #1381958) | Cod sursa (job #1797841) | Cod sursa (job #657676) | Cod sursa (job #1133345)
#include <fstream>
#include <vector>
#include <cstring>
#define NMAX 10005
using namespace std;
typedef vector<int>::iterator iter;
FILE* f=freopen("cuplaj.in","r",stdin);
FILE* o=freopen("cuplaj.out","w",stdout);
int nr,nl,n;
vector<int> graph[NMAX];
bool used[NMAX];
int lft[NMAX],rgt[NMAX];
int couples;
void Reading()
{
scanf("%d%d%d",&nl,&nr,&n);
for(int i=0;i<n;++i)
{
int x,y;
scanf("%d%d",&x,&y);
graph[x].push_back(y);
}
}
int Match(int x)
{
if(used[x])
return 0;
used[x]=1;
for(iter i=graph[x].begin();i<graph[x].end();++i)
{
if(!rgt[*i])
{
rgt[*i]=x;
lft[x]=*i;
return 1;
}
}
for(iter i=graph[x].begin();i<graph[x].end();++i)
{
if(Match(rgt[*i]))
{
rgt[*i]=x;
lft[x]=*i;
return 1;
}
}
return 0;
}
int main()
{
Reading();
for(int i=1;i<=nl;++i)
{
if(!lft[i])
{
int ok;
couples+=(ok=Match(i));
if(!ok)
{
memset(used,0,sizeof(used));
couples+=Match(i);
}
}
}
printf("%d\n",couples);
for(int i=1;i<=nl;++i)
{
if(lft[i])
printf("%d %d\n",i,lft[i]);
}
return 0;
}