Pagini recente » Cod sursa (job #850678) | Cod sursa (job #2917594) | Cod sursa (job #2656626) | Cod sursa (job #2680460) | Cod sursa (job #703616)
Cod sursa(job #703616)
#include <fstream>
#include <cstring>
using namespace std;
ifstream f("cuplaj.in");
ofstream g("cuplaj.out");
int ll,rr,nr,a,b,i;
int l[10005],r[10005],u[10005];
struct nod{
int x;
nod*urm;
}*v[10005];
void adauga(int w1,int w2)
{
nod*p;
p=new nod;
p->x=w2;
p->urm=v[w1];
v[w1]=p;
}
int cuplaj(int sursa)
{
nod*p;
if(u[sursa]) return 0;
u[sursa]=1;
for(p=v[sursa];p!=NULL;p=p->urm)
if(!r[p->x])
{
l[sursa]=p->x;
r[p->x]=sursa;
return 1;
}
for(p=v[sursa];p!=NULL;p=p->urm)
if(cuplaj(r[p->x]))
{
l[sursa]=p->x;
r[p->x]=sursa;
return 1;
}
return 0;
}
int main()
{
f>>ll>>rr>>nr;
for(;nr;nr--)
{
f>>a>>b;
adauga(a,b);
}
int ok=1;
while(ok)
{
ok=0;
memset(u,0,sizeof(u));
for(i=1;i<=ll;i++)
if(!l[i])
ok+=cuplaj(i);
}
int nrr=0;
for(i=1;i<=ll;i++) if(l[i]) nrr++;
g<<nrr<<'\n';
for(i=1;i<=ll;i++) if(l[i]>0) g<<i<<' '<<l[i]<<'\n';
f.close();
g.close();
return 0;
}