Pagini recente » Cod sursa (job #2890996) | Cod sursa (job #1889514) | Cod sursa (job #1410904) | Cod sursa (job #3180326) | Cod sursa (job #2871148)
#include <fstream>
#include <string>
#include <cstring>
#include <map>
#include <algorithm>
#include <stack>
#include <deque>
#include <vector>
#include <queue>
#include <bitset>
#define Nmax 100001
using namespace std;
const int oo = 1 << 28;
typedef vector < int > VI;
ifstream fin("cuplaj.in");
ofstream fout("cuplaj.out");
int a, b, m, n, st[Nmax], dr[Nmax], ans, x, y;
bool F[Nmax];
VI V[Nmax];
bool cuplaj(int vertex){
if(F[vertex] == 1)
return 0;
F[vertex] = 1;
for(int new_vertex : V[vertex])
if(dr[new_vertex] == 0){
st[vertex] = new_vertex;
dr[new_vertex] = vertex;
return 1;
}
for(int new_vertex : V[vertex])
if(cuplaj(dr[new_vertex])){
st[vertex] = new_vertex;
dr[new_vertex] = vertex;
return 1;
}
return 0;
}
int main() {
fin >> a >> b >> m;
for(int i = 1; i <= m; ++i){
fin >> x >> y;
V[x].push_back(y);
}
int done = 0;
while(!done){
done = 1;
for(int i = 1; i <= a; ++i)
F[i] = 0;
for(int i = 1; i <= a; ++i)
if(st[i] == 0 && cuplaj(i)){
++ans;
done = 0;
}
}
fout << ans << "\n";
for(int i = 1; i <= a; ++i)
if(st[i])
fout << i << " " << st[i] << "\n";
return 0;
}