Pagini recente » Cod sursa (job #2360518) | Cod sursa (job #2296898) | Cod sursa (job #158479) | Cod sursa (job #1266791) | Cod sursa (job #1884220)
#include <bits/stdc++.h>
#define maxN 10005
using namespace std;
bool seen[maxN],ok;
vector<int> v[maxN];
int n,m,i,j,x,y,maxmatch;
int _left[maxN],_right[maxN];
bool pairup(int nod)
{
if(seen[nod])
return false;
seen[nod]=true;
for(auto it:v[nod])
if(!_right[it]) /* node not matched */
{
_left[nod]=it;
_right[it]=nod;
maxmatch++;
return true;
}
for(auto it:v[nod])
if(pairup(_right[it])) /* re-match node */
{
_left[nod]=it;
_right[it]=nod;
return true;
}
return false;
}
int main()
{
freopen("cuplaj.in","r",stdin);
freopen("cuplaj.out","w",stdout);
scanf("%d %d",&n,&m);
scanf("%d",&m);
for(i=1;i<=m;i++){
scanf("%d %d",&x,&y),
v[x].push_back(y);
}
ok=true;
while(ok) /* maximum number of augmenting paths */
{ /* simultaneously */
ok=false;
memset(seen,false,sizeof(seen));
for(i=1;i<=n;i++)
if(!_left[i] && pairup(i))
ok=true;
}
printf("%d\n",maxmatch);
for(i=1;i<=n;i++)
if(_left[i])
printf("%d %d\n",i,_left[i]);
return 0;
}