Pagini recente » Cod sursa (job #643070) | Cod sursa (job #2320898) | Cod sursa (job #1977792) | Cod sursa (job #3186798) | Cod sursa (job #2482399)
#include <bits/stdc++.h>
using namespace std;
ifstream f("cuplaj.in");
ofstream g("cuplaj.out");
int N, M, E, u, v;
int L[10003], R[10003];
vector<int> G[10003];
bool sel[10003];
bool cuplaj(int nod) {
sel[nod] = true;
for(auto i : G[nod])
if(!R[i]) {
L[nod] = i;
R[i] = nod;
return true;
}
for(auto i : G[nod])
if(!sel[R[i]] && cuplaj(R[i])) {
L[nod] = i;
R[i] = nod;
return true;
}
return 0;
}
int cuplaj() {
bool can = true;
while(can) {
can = false;
memset(sel, false, sizeof(sel));
for(int i = 1; i <= N; i++)
if(!L[i] && !sel[i])
can |= cuplaj(i);
}
int nr = 0;
for(int i = 1; i <= N; i++)
nr += (L[i] != 0);
return nr;
}
int main() {
f >> N >> M >> E;
for(int i = 1; i <= E; i++) {
f >> u >> v;
G[u].push_back(v);
}
g << cuplaj() << "\n";
for(int i = 1; i <= N; i++)
if(L[i]) {
g << i << " " << L[i] << "\n";
}
return 0;
}