Pagini recente » Cod sursa (job #2528030) | Cod sursa (job #1338499) | Cod sursa (job #2985412) | Cod sursa (job #2796183) | Cod sursa (job #2580094)
#include <bits/stdc++.h>
const int nmax=1e4+3;
const int inf=2e9+3;
using namespace std;
vector<int>v[nmax];
int l[nmax],r[nmax],f[nmax];
bool bi(int k)
{
if(f[k]) return 0;
f[k]=1;
for(auto it:v[k])
if(!r[it])
{
l[k]=it;
r[it]=k;
return 1;
}
for(auto it:v[k])
if(bi(r[it]))
{
l[k]=it;
r[it]=k;
return 1;
}
return 0;
}
int main()
{
ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
freopen("cuplaj.in","r",stdin);
freopen("cuplaj.out","w",stdout);
int n,m,k;
cin>>n>>m>>k;
while(k--)
{
int x,y;
cin>>x>>y;
v[x].push_back(y);
}
int ok=1;
while(ok)
{
ok=0;
for(int i=0;i<nmax;i++) f[i]=0;
for(int i=1;i<=n;i++)
if(!l[i]) ok |= bi(i);
}
int cuplaj=0;
for(int i=1;i<=n;i++) cuplaj+=(l[i]>0);
cout<<cuplaj<<"\n";
for(int i=1;i<=n;i++) if(l[i]>0)
cout<<i<<" "<<l[i]<<"\n";
}