Pagini recente » Cod sursa (job #1367966) | Cod sursa (job #1115092) | Cod sursa (job #2990735) | Cod sursa (job #1589564) | Cod sursa (job #703564)
Cod sursa(job #703564)
#include <fstream>
#include <cstring>
using namespace std;
ifstream f("cuplaj.in");
ofstream g("cuplaj.out");
int ll,rr,nr,a,b,i;
int l[100005],r[100005],u[100005];
struct nod{
int x;
nod*urm;
}*v[100005],*p;
void adauga(int w1,int w2)
{
p=new nod;
p->x=w2;
p->urm=v[w1];
v[w1]=p;
}
int cuplaj(int sursa)
{
if(u[sursa]) return 0;
u[sursa]=1;
p=v[sursa];
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;
}