Pagini recente » Cod sursa (job #2665812) | Cod sursa (job #1666221) | Cod sursa (job #2139839) | Cod sursa (job #3248038) | Cod sursa (job #1549359)
#include<fstream>
using namespace std;
typedef struct lista
{
int info;
lista * next;
}* nod;
nod a[10123];
int r[10123];
int l[10123];
int i,j,k,m,n,u;
void add(int x, nod &p)
{
nod r=new lista;
r->info=x;
r->next=p;
p=r;
}
bool viz[10012];
bool cuplaj(int x)
{
if (viz[x]) return false;
viz[x]=1;
for (nod p=a[x]; p ; p=p->next)
if (!r[p->info] || cuplaj[r[p->info]])
{
r[p->info]=x;
l[x]=p->info;
return true;
}
return false;
}
int n1,n2;
int main()
{
ifstream cin("cuplaj.in");
ofstream cout("cuplaj.out");
//ios_base::sync_wi1th_stdio(false);
cin>>n1>>n2>>m;
//cout<<m<<"\n";
while (m--)
{
int x,y;
cin>>x>>y;
//add(x,a[y]);
add(y,a[x]);
}
bool ok=true;
while (ok)
{
ok=false;
for (i=1; i<=n1; ++i) viz[i]=0;
for (i=1; i<=n1; ++i)
if (!l[i]) ok+=cuplaj(i);
}
int mx=0;
for (i=1; i<=n1; ++i)
if (l[i]) ++mx;
cout<<mx<<"\n";
for (i=1; i<=n1; ++i)
if (l[i]) cout<<i<<" "<<l[i]<<"\n";
return 0;
}