Pagini recente » Cod sursa (job #3137030) | Cod sursa (job #1177384) | Cod sursa (job #2699633) | Cod sursa (job #1984916) | Cod sursa (job #2573983)
#include<bits/stdc++.h>
using namespace std;
const int maxN=20005;
bool seen[maxN];
int l[maxN],r[maxN];
vector<int> v[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,augment;
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(n+y);
}
augment=1;
while(augment)
{
augment=0;
memset(seen,0,sizeof(seen));
for(int i=1;i<=n;i++)
if(!l[i]) augment|=path(i);
}
int cuplaj=0;
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;
}