Pagini recente » Cod sursa (job #2795645) | Cod sursa (job #1187915) | Cod sursa (job #784369) | Cod sursa (job #15394) | Cod sursa (job #1315342)
#include<fstream>
#include<vector>
#include<cstring>
#include<algorithm>
#define MAXN 10001
using namespace std;
ifstream fin("cuplaj.in");
ofstream fout("cuplaj.out");
int m, n, e;
vector<int> G[MAXN];
int L[MAXN], R[MAXN];
bool VIZ[MAXN];
void read() {
fin>>n>>m>>e;
int a, b;
while(e--) {
fin>>a>>b;
G[a].push_back(b);
}
}
bool pairup(int i) {
if(VIZ[i]) return false;
VIZ[i] = true;
for(int t=0; t<G[i].size(); t++) {
int vec = G[i][t];
if(!R[vec]) {
R[vec] = i;
L[i] = vec;
return true;
}
}
for(int t=0; t<G[i].size(); i++) {
int vec = G[i][t];
if(pairup(R[vec])) {
R[vec] = i;
L[i] = vec;
return true;
}
}
return false;
}
void solve() {
bool ok = 1;
while(ok) {
ok = 0;
memset(VIZ, false, sizeof(VIZ));
for(int i=1; i<=n; i++) {
if(!L[i])
ok |= pairup(i);
}
}
}
int cuplaj = 0;
inline void afis(int pas) {
if(pas < 1) fout<<cuplaj<<'\n';
else {
if(L[pas]>0) {
cuplaj++;
afis(pas-1);
fout<<pas<<" "<<L[pas]<<'\n';
} else {
afis(pas-1);
}
}
}
int main() {
read();
solve();
afis(n);
}