Pagini recente » Cod sursa (job #2295696) | Cod sursa (job #2414413) | Cod sursa (job #3248973) | Cod sursa (job #2909552) | Cod sursa (job #1015138)
#include<cstdio>
#include<cstdlib>
#include<vector>
using namespace std;
vector<short int>v[10001];
short int a[10001],b[10001];
char atins[10001];
int n,m,x,y,p,i;
int cuplaj(short int x)
{
short int lim=v[x].size(),i;
if(atins[x]) return 0;
atins[x]=1;
for(i=0;i<lim;i++)
{
if(b[v[x][i]]==0)
{
a[x]=v[x][i];
b[v[x][i]]=x;
return 1;
}
}
for(i=0;i<lim;i++)
{
if(cuplaj(b[v[x][i]]))
{
a[x]=v[x][i];
b[v[x][i]]=x;
return 1;
}
}
return 0;
}
int main()
{
freopen("cuplaj.in", "r", stdin);
freopen("cuplaj.out", "w", stdout);
scanf("%d%d%d",&n,&m,&p);
for(i=1;i<=p;i++)
{
scanf("%d%d",&x,&y);
v[x].push_back(y);
}
p=1;
while(p)
{
p=0;
for(i=1;i<=n;i++) atins[i]=0;
for(i=1;i<=n;i++)
{
if(a[i]==0&&cuplaj(i)) p=1;
}
}
x=0;
for(i=1;i<=n;i++) if(a[i]) x++;
printf("%d\n",x);
for(i=1;i<=n;i++) if(a[i]) printf("%d %d\n",i,a[i]);
fclose(stdin);
fclose(stdout);
return 0;
}