Pagini recente » Cod sursa (job #2028560) | Cod sursa (job #1374734) | Cod sursa (job #1065991) | Rating Alexa Stefan - Iuliu (mestefy) | Cod sursa (job #1067712)
#include <fstream>
#include <bitset>
using namespace std;
const int N=10006;
ifstream fin("cuplaj.in");
ofstream fout("cuplaj.out");
struct ls
{
int n;
ls *next;
};
ls *g[N];
int L[N], R[N];
bitset <N> v;
int n, m;
int pairup(int x)
{
if(v[x]) return 0;
ls *p;
v[x]=1;
for(p=g[x];p;p=p->next)
{
if(!R[p->n])
{
L[x]=p->n;
R[p->n]=x;
return 1;
}
}
for(p=g[x];p;p=p->next)
{
if(pairup(R[p->n]))
{
L[x]=p->n;
R[p->n]=x;
return 1;
}
}
return 0;
}
int main()
{
int q, i, ok, x, y, sol=0;
fin>>n>>m>>q;
while(q--)
{
fin>>x>>y;
ls *p=new ls;
p->n=y;
p->next=g[x];
g[x]=p;
}
do
{
ok=0;
v.reset();
for(i=1;i<=n;i++) if(!L[i]) ok|=pairup(i);
}
while(ok);
for(i=1;i<=n;i++) if(L[i]) sol++;
fout<<sol<<"\n";
for(i=1;i<=n;i++) if(L[i]) fout<<i<<" "<<L[i]<<"\n";
fin.close();
fout.close();
}