Pagini recente » Cod sursa (job #1667705) | Cod sursa (job #1112383) | Cod sursa (job #1239858) | Istoria paginii runda/romanian_masters | Cod sursa (job #1014111)
#include<stdio.h>
#include<algorithm>
#include<vector>
unsigned l[10005],r[10005],n,m,e;
bool viz[10005];
using namespace std;
vector <unsigned> da[10005];
unsigned cup(unsigned u)
{
unsigned i,a;
if(viz[u]==1)
return 0;
viz[u]=1;
a=da[u].size();
for(i=0;i<a;i++)
if(r[da[u][i]]==0)
{
l[u]=da[u][i];
r[da[u][i]]=u;
return 1;
}
for(i=0;i<a;i++)
if(cup(r[da[u][i]]))
{
l[u]=da[u][i];
r[da[u][i]]=u;
return 1;
}
return 0;
}
int main()
{
freopen("cuplaj.in","r",stdin);
freopen("cuplaj.out","w",stdout);
scanf("%u%u%u",&n,&m,&e);
unsigned i,x,y;
bool t=1;
for(i=1;i<=e;i++)
{
scanf("%u%u",&x,&y);
da[x].push_back(y);
}
while(t==1)
{t=0;
for(i=1;i<=n;i++)
viz[i]=0;
for(i=1;i<=n;i++)
if(l[i]==0 && cup(i)!=0)
t=1;
}
x=0;
for(i=1;i<=n;i++)
if(l[i]>0)
x++;
printf("%u\n",x);
for(i=1;i<=n;i++)
if(l[i]!=0)
printf("%u %u\n",i,l[i]);
return 0;
}