Pagini recente » Cod sursa (job #718947) | Cod sursa (job #74097) | Cod sursa (job #79536) | Cod sursa (job #2810682) | Cod sursa (job #2736825)
#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);
}
for(int i=1; i<=n1; i++)
if(couple[i]==0){
for(int j=1; j<=n1; j++)
viz[j]=false;
pair_up(i);
}
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;
}