Pagini recente » Cod sursa (job #3248877) | Cod sursa (job #3185641) | Cod sursa (job #35075) | Cod sursa (job #2635047) | Cod sursa (job #2870706)
#include<bits/stdc++.h>
using namespace std;
const int NMAX=10005;
int left1[NMAX],right1[NMAX],viz[NMAX];
vector<int>v[NMAX];
bool cuplaj(int nod)
{
if(viz[nod])return 0;
viz[nod]=1;
for(auto it:v[nod])
if(!right1[it])
{
right1[it]=nod;
left1[nod]=it;
return 1;
}
for(auto it:v[nod])
{
left1[right1[it]]=0;
if(cuplaj(right1[it]))
{
right1[it]=nod;
left1[nod]=it;
return 1;
}
left1[right1[it]]=it;
}
}
int main()
{
freopen("cuplaj.in","r",stdin);
freopen("cuplaj.out","w",stdout);
int m,n,k,a,b,i;
cin>>m>>n>>k;
for(i=1;i<=k;i++)
{
cin>>a>>b;
v[a].push_back(b);
}
for(i=1;i<=m;i++)
if(!left1[i]){memset(viz,0,sizeof(viz));cuplaj(i);}
int cnt=0;
for(i=1;i<=m;i++)
if(left1[i])cnt++;
cout<<cnt<<'\n';
for(i=1;i<=m;i++)
if(left1[i])cout<<i<<" "<<left1[i]<<'\n';
}