Pagini recente » Cod sursa (job #1339316) | Cod sursa (job #212688) | Cod sursa (job #1827667) | Cod sursa (job #1599704) | Cod sursa (job #2462049)
#include <fstream>
#include <iostream>
#include <cstring>
#include <vector>
using namespace std;
ifstream fin ("cuplaj.in");
ofstream fout ("cuplaj.out");
const int MAXN = 200001;
int L[MAXN],R[MAXN],n,m,viz[MAXN],e,x,y;
vector < int > G[MAXN];
bool cuplaj(int x) {
if ( viz[x] )
return false;
viz[x] = true;
for ( auto y : G[x])
if ( !R[y] or cuplaj(R[y])) {
R[y] = x;
L[x] = y;
return true;
}
return false;
}
int main() {
fin >> n >> m >> e;
for ( ; e > 0; --e) {
fin >> x >> y;
G[x].push_back(y + n);
}
int cnt = 0;
bool ok = true;
while( ok == true) {
ok = false;
memset(viz,0,sizeof(viz));
for ( int i = 1; i <= n; ++i)
if ( !L[i] and cuplaj(i) ) {
++cnt;
ok = true;
}
}
fout << cnt << "\n";
for ( int i = 1; i <= n; ++i)
if ( L[i])
fout << i << " " << L[i]-n << "\n";
}