Pagini recente » Cod sursa (job #1613513) | Cod sursa (job #1173057) | Cod sursa (job #2659099) | Cod sursa (job #2200164) | Cod sursa (job #2546637)
#include<bits/stdc++.h>
using namespace std;
const int maxN=(20005);
vector<int> v[maxN];
bool seen[maxN];
int r[maxN],l[maxN];
int path(int nod)
{
if(seen[nod]) return 0;
seen[nod]=1;
for(auto it:v[nod])
{
if(!r[it])
{
l[nod]=it;
r[it]=nod;
return 1;
}
}
for(auto it:v[nod])
if( path(r[it]))
{
l[nod]=it;
r[it]=nod;
return 1;
}
return 0;
}
int n,m,e,x,y,cuplaj;
int main()
{
freopen("cuplaj.in","r",stdin);
freopen("cuplaj.out","w",stdout);
scanf("%d%d%d",&n,&m,&e);
for(int i=1;i<=e;i++)
{
scanf("%d%d",&x,&y);
v[x].push_back(y+n);
v[y+n].push_back(x);
}
int augment=1;
while(augment)
{
memset(seen,0,sizeof(seen));
augment=0;
for(int i=1;i<=n;i++)
if(!l[i]) augment|=path(i);
}
for(int i=1;i<=n;i++)
if(l[i]) cuplaj++;
printf("%d\n",cuplaj);
for(int i=1;i<=n;i++)
if(l[i]) printf("%d %d\n",i,l[i]-n);
return 0;
}