Pagini recente » Cod sursa (job #2947502) | Cod sursa (job #2127913) | Cod sursa (job #1116324) | Cod sursa (job #1377426) | Cod sursa (job #1119035)
#include <stdio.h>
#include <vector>
using namespace std;
#define Nmax 10005
vector <int> graph[Nmax];
int l[Nmax], r[Nmax], v[Nmax];
int n, m, e, c;
void read(){
freopen("cuplaj.in", "r", stdin);
int u, v;
scanf("%d %d %d", &n, &m, &e);
for (int i = 1; i <= e; ++i){
scanf("%d %d", &u, &v);
graph[u].push_back(v);
}
fclose(stdin);
}
int find(int u){
if (v[u])
return 0;
v[u] = 1;
vector <int>::iterator it;
for (it = graph[u].begin(); it != graph[u].end(); ++it)
if (!r[*it]){
l[u] = *it;
r[*it] = u;
return 1;
}
for (it = graph[u].begin(); it != graph[u].end(); ++it)
if (find(r[*it])){
l[u] = *it;
r[*it] = u;
return 1;
}
return 0;
}
void hopcroftKarp(){
bool change = true;
while (change){
change = false;
for (int i = 1; i <= n; ++i)
v[i] = 0;
for (int i = 1; i <= n; ++i)
if (!l[i])
if (find(i)){
++c;
change = true;
}
}
}
void write(){
freopen("cuplaj.out", "w", stdout);
printf("%d\n", c);
for (int i = 1; i <= n; ++i)
if (l[i])
printf("%d %d\n", i, l[i]);
fclose(stdout);
}
int main(){
read();
hopcroftKarp();
write();
}