Pagini recente » Cod sursa (job #289084) | Cod sursa (job #503415) | Cod sursa (job #1607211) | Cod sursa (job #1364644) | Cod sursa (job #2366824)
#include<bits/stdc++.h>
using namespace std;
const int maxN=(2e4)+5;
bool seen[maxN];
vector<int> v[maxN];
int r[maxN];
int l[maxN];
int x,y,n,m,e;
inline int path(int nod)
{
if(seen[nod]) return 0;
seen[nod]=1;
for(auto it:v[nod])
{
if(!r[it])
{
r[it]=nod;
l[nod]=it;
return 1;
}
}
for(auto it:v[nod])
{
if(path(r[it]))
{
r[it]=nod;
l[nod]=it;
return 1;
}
}
return 0;
}
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);
}
int 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;
}