Pagini recente » Cod sursa (job #2835461) | Cod sursa (job #2435343) | Cod sursa (job #2780770) | Cod sursa (job #1237365) | Cod sursa (job #1413628)
#include <cstdio>
#include <vector>
#include <algorithm>
#include <cstring>
using namespace std;
#define N 10005
vector <int> v[N];
int a[N],b[N],u[N];
int pairup(const int n)
{
if(u[n])
return 0;
int i;
u[n]=1;
for(i=0;i<v[n].size();i++)
if(!b[v[n][i]])
{
a[n]=v[n][i];
b[v[n][i]]=n;
return 1;
}
for(i=0;i<v[n].size();i++)
if(pairup(b[v[n][i]]))
{
a[n]=v[n][i];
b[v[n][i]]=n;
return 1;
}
return 0;
}
int main(void)
{
freopen("cuplaj.in","r",stdin);
freopen("cuplaj.out","w",stdout);
int n,m,i,k,x,y;
scanf("%d%d%d",&n,&m,&k);
while(k--)
{
scanf("%d%d",&x,&y);
v[x].push_back(y);
}
k=1;
while(k)
{
k=0;
memset(u,0,sizeof(u));
for(i=1;i<=n;i++)
if(!a[i]&&pairup(i))
k=1;
}
k=0;
for(i=1;i<=n;i++)
if(a[i]>0)
k++;
printf("%d\n",k);
for(i=1;i<=n;i++)
if(a[i]>0)
printf("%d %d\n",i,a[i]);
return 0;
}