Pagini recente » Cod sursa (job #2081359) | Cod sursa (job #539411) | Cod sursa (job #239082) | Cod sursa (job #708272) | Cod sursa (job #430408)
Cod sursa(job #430408)
#include<iostream>
#include<vector>
#include<string>
using namespace std;
#define NM 10005
vector<int> G[NM];
int cuplu[NM][2],cuplaj=0,L,R,E;
inline void leaga(int a,int b)
{
cuplu[a][0]=b;
cuplu[b][1]=a;
}
int cupleaza(int nod)
{
for(int i=0;i<G[nod].size();++i)
{
int nnod=G[nod][i];
if(!cuplu[nnod][1])
{
leaga(nod,nnod);
return 1;
}
}
for(int i=0;i<G[nod].size();++i)
{
int nnod=G[nod][i];
if(cuplu[nnod][1]==nod) continue;
if(cupleaza(cuplu[nnod][1]))
{
leaga(nod,nnod);
return 1;
}
}
return 0;
}
int main()
{
int a,b;
freopen("cuplaj.in","r",stdin);
freopen("cuplaj.out","w",stdout);
scanf("%d %d %d",&L,&R,&E);
while(E--)
{
scanf("%d %d",&a,&b);
G[a].push_back(b);
}
while(1)
{
int plus=0;
for(int i=1;i<=L;++i)
if(cupleaza(i))
{
++cuplaj;
plus=1;
}
if(!plus) break;
}
printf("%d\n",cuplaj);
for(int i=1;i<=L;++i)
if(cuplu[i][0]) printf("%d %d\n",i,cuplu[i][0]);
return 0;
}