Pagini recente » Cod sursa (job #182654) | Cod sursa (job #519904) | Cod sursa (job #2592260) | Cod sursa (job #2437604) | Cod sursa (job #720075)
Cod sursa(job #720075)
#include <fstream>
#include <cstring>
#include <vector>
#define MAXN 10010
using namespace std;
vector<int>v[MAXN];
int r[MAXN],l[MAXN],n,m,e,c;
bool u[MAXN];
bool pairup(int x)
{
vector<int>::iterator it;
if(u[x]) return 0;
u[x]=1;
for(it=v[x].begin();it!=v[x].end();it++)
if(r[*it]==0)
{
l[x]=*it;
r[*it]=x;
c++;
return 1;
}
for(it=v[x].begin();it!=v[x].end();it++)
if(pairup(r[*it]))
{
l[x]=*it;
r[*it]=x;
return 1;
}
return 0;
}
int main()
{
int i,x,y;
bool ok;
ifstream fi("cuplaj.in");
ofstream fo("cuplaj.out");
fi>>n>>m>>e;
for(i=1;i<=e;i++)
{
fi>>x>>y;
v[x].push_back(y);
}
ok=1;
while(ok)
{
ok=0;
memset(u,0,sizeof(u));
for(i=1;i<=n;i++) if(!l[i]) if(pairup(i)) ok=1;
}
fo<<c<<"\n";
for(i=1;i<=n;i++)
if(l[i]) fo<<i<<" "<<l[i]<<"\n";
return 0;
}