Pagini recente » Cod sursa (job #929994) | Cod sursa (job #1423402) | Cod sursa (job #1002473) | Cod sursa (job #236365) | Cod sursa (job #2216599)
#include <bits/stdc++.h>
using namespace std;
const int N = 10010;
int n, m, e, l[N], r[N], ans;
vector <int> v[N];
bool viz[N];
bool dfs(int q){
//cout << q << " ";
if (viz[q]) return 0;
viz[q] = 1;
for (auto it: v[q]){
if (!r[it] || dfs(r[it])){ // verifica daca nu mai poate foace alte legaturi
l[q] = it;
r[it] = q;
return 1;
}
}
return 0;
}
int main(){
ifstream cin ("cuplaj.in");
ofstream cout ("cuplaj.out");
cin >> n >> m >> e;
for (int i=1, x, y; i<=e; i++){
cin >> x >> y;
v[x].push_back(y);
}
bool flag = 1;
while (flag){
flag = 0;
for (int i=1; i<=n; i++) viz[i] = 0;
for (int i=1; i<=n; i++){
if (!l[i] && dfs(i)){
flag = 1;
ans++;
}
//cout << "\n";
}
//for (int i=1; i<=n; i++) cout << l[i] << " ";
//cout << "\n";
//for (int i=1; i<=m; i++) cout << r[i] << " ";
//cout << "\n\n";
}
cout << ans << "\n";
for (int i=1; i<=n; i++)
if (l[i]) cout << i << " " << l[i] << "\n";
return 0;
}