Pagini recente » Cod sursa (job #2583710) | Cod sursa (job #2676061) | Cod sursa (job #2770954) | Cod sursa (job #400994) | Cod sursa (job #691571)
Cod sursa(job #691571)
#include <fstream>
#include <cstring>
using namespace std;
ifstream f("cuplaj.in");
ofstream g("cuplaj.out");
struct node
{
int nr;
node *next;
} *v[10005],*p;
int n,m,l[10005],r[10005],ok,c,e,x,y;
char ut[10005];
int cupleaza(int k)
{
if(ut[k]) return 0;
ut[k]='1';
node *q=v[k];
while(q)
{
if(!r[q->nr])
{
l[k]=q->nr;
r[q->nr]=k;
return 1;
}
q=q->next;
}
q=v[k];
while(q)
{
if(cupleaza(r[q->nr]))
{
l[k]=q->nr;
r[q->nr]=k;
return 1;
}
q=q->next;
}
return 0;
}
int main()
{
int i;
f>>n>>m>>e;
for(i=1;i<=e;++i)
{
f>>x>>y;
p=new node;
p->nr=y;
p->next=v[x];
v[x]=p;
}
ok=1;
while(ok)
{
ok=0;
memset(ut,0,sizeof(ut));
for(i=1;i<=n;++i)
if(!l[i]) ok+=cupleaza(i);
}
for(i=1;i<=n;++i) if(l[i]) ++c;
g<<c<<'\n';
for(i=1;i<=n;++i)
if(l[i]) g<<i<<' '<<l[i]<<'\n';
f.close(); g.close();
return 0;
}