Pagini recente » Cod sursa (job #1104547) | Borderou de evaluare (job #2019972) | Cod sursa (job #1452413) | Cod sursa (job #2339755) | Cod sursa (job #1188907)
#include <cstdio>
#include <vector>
#include <cstring>
#define N 10010
using namespace std;
vector <int>v[N];
bool V[N];
int n,m,e,S[N],D[N],i,C,x,y;
bool creste(int nod)
{
if(V[nod])
return 0;
V[nod]=1;
vector<int>::iterator it;
for(it=v[nod].begin();it!=v[nod].end();it++)
if(!S[*it])
{
S[*it]=nod;
D[nod]=*it;
return 1;
}
for(it=v[nod].begin();it!=v[nod].end();it++)
if(creste(S[*it]))
{
S[*it]=nod;
D[nod]=*it;
return 1;
}
return 0;
}
inline bool OK()
{
int ret=0;
memset(V,0,sizeof(V));
for(i=1;i<=n;i++)
if(!D[i]&&creste(i))
{
C++;
ret=1;
}
return ret;
}
int main()
{
freopen("cuplaj.in","r",stdin);
freopen("cuplaj.out","w",stdout);
scanf("%d%d%d",&n,&m,&e);
for(i=1;i<=e;i++)
{
scanf("%d%d",&x,&y);
v[x].push_back(y);
}
while(OK());
printf("%d\n",C);
for(i=1;i<=n;i++)
if(D[i])
printf("%d %d\n",i,D[i]);
return 0;
}