Pagini recente » Cod sursa (job #1693780) | Cod sursa (job #1238632) | Cod sursa (job #18912) | Cod sursa (job #3272391) | Cod sursa (job #1161648)
#include<fstream>
#include<list>
#include<vector>
#include<cstring>
#define DMAX 100
using namespace std;
ifstream fin ("cuplaj.in");
ofstream fout("cuplaj.out");
list<int> lista;
vector< list<int> >l(DMAX,lista);
int i,ok,n,m,nrm,x,y,cuplaj;
int viz[DMAX],st[DMAX],dr[DMAX];
int pairup(int x)
{
list<int>::iterator it;
if(viz[x])
return 0;
viz[x]=1;
for(it=l[x].begin();it!=l[x].end();++it)
{
y=*it;
if (!dr[y] || pairup(st[y]))
{
st[x]=y;
dr[y]=x;
return 1;
}
}
return 0;
}
int main()
{
fin>>n>>m>>nrm;
for(;nrm--;)
{
fin>>x>>y;
l[x].push_back(y);
}
ok=1;
while(ok)
{
ok=0;
for(i=1;i<=n;++i) viz[i]=0;
for(i=1;i<=n;++i)
if (!st[i])
{
++cuplaj;
ok=pairup(i);
}
}
fout<<cuplaj<<'\n';
for(i=1;i<=n;++i)
if(st[i]>0)
fout<<i<<" "<<st[i]<<'\n';
return 0;
}