Pagini recente » Cod sursa (job #2741035) | Cod sursa (job #922580) | Cod sursa (job #2446221) | Cod sursa (job #2856254) | Cod sursa (job #1853970)
#include <fstream>
#include <cstring>
using namespace std;
ifstream cin("cuplaj.in");
ofstream cout("cuplaj.out");
struct celula{
int nod;
celula *next;
}*g[10001],*a,*p;
int n,m,x,y,cost,ok,sol,i,e;
bool viz[10001];
int l[10001],r[10001];
bool cupleaza(int nod)
{
if(viz[nod]==1) return false;
viz[nod]=1;
for(celula *p=g[nod]; p; p=p->next )
{
if(l[p->nod]==0)
{
r[nod] = p->nod;
l[p->nod] = nod;
return true;
}
}
for(celula *p=g[nod]; p; p=p->next )
{
if(cupleaza(l[p->nod]))
{
r[nod] = p->nod;
l[p->nod] = nod;
return true;
}
}
return false;
}
int main()
{
cin>>n>>m>>e;
for(i=1;i<=e;++i)
{
cin>>x>>y;
a=new celula;
a->nod=y;
a->next=g[x];
g[x]=a;
}
ok=1;
while(ok)
{
ok=0;
memset(viz,0,sizeof(viz));
for(i=1;i<=n;++i)
{
if(r[i]==0)
ok = ok | cupleaza(i);
}
}
for(i=1;i<=n;++i)
{
if(r[i]!=0) ++sol;
}
cout<<sol<<"\n";
for(i=1;i<=n;++i)
{
if(r[i]!=0) cout<<i<<" "<<r[i]<<"\n";
}
return 0;
}