Pagini recente » Cod sursa (job #2940470) | Cod sursa (job #1745266) | Cod sursa (job #1303342) | Cod sursa (job #1535719) | Cod sursa (job #2736829)
#include <bits/stdc++.h>
using namespace std;
#define SERVER 0
const string nameFile="cuplaj";
ifstream in (nameFile+".in");
ofstream out(nameFile+".out");
typedef pair<int, int> Pii;
#if (SERVER)
#define in cin
#define out cout
#endif
const int nmax=2e4;
int n1, n2, m, x, y;
vector <int> muchii[nmax+2];
int couple[nmax+2];
bool viz[nmax+2];
bool pair_up(int nod){ ///se presupune ca s-a cuplat cu un nod de dinainte
if(viz[nod])
return false;
viz[nod]=true;
for(auto &x:muchii[nod])
if(couple[x]==0||pair_up(couple[x])){
couple[x]=nod, couple[nod]=x;
return true;
}
return false;
}
int main()
{
ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);
in>>n1>>n2>>m;
for(int i=1; i<=m; i++){
in>>x>>y;
muchii[x].push_back(y+n1);
muchii[y+n1].push_back(x);
}
while(true){
fill(viz+1, viz+n1+1, false);
bool ok=false;
for(int i=1; i<=n1; i++)
if(viz[i]==false&&!couple[i])
ok|=pair_up(i);
if(ok==false)
break;
}
int ans=0;
for(int i=1; i<=n1; i++)
if(couple[i]!=0)
ans++;
out<<ans<<"\n";
for(int i=1; i<=n1; i++)
if(couple[i]!=0)
out<<i<<" "<<couple[i]-n1<<"\n";
return 0;
}