Pagini recente » Cod sursa (job #261214) | Cod sursa (job #1998146) | Cod sursa (job #1456887) | Cod sursa (job #462643) | Cod sursa (job #2786375)
#include <bits/stdc++.h>
using namespace std;
inline void Open(const string Name) {
#ifndef ONLINE_JUDGE
(void)!freopen((Name + ".in").c_str(), "r", stdin);
(void)!freopen((Name + ".out").c_str(), "w", stdout);
#endif
}
vector <int> Gr[10001];
int viz[10001], r[10001], l[10001];
int N, M, E, x, y, cnt;
bool ok;
bool pair_up(int v) {
viz[v] = 1;
for(int &to : Gr[v]) {
if(!r[to]) {
l[v] = to;
r[to] = v;
return 1;
}
}
for(int &to : Gr[v]) {
if(!viz[r[to]] && pair_up(r[to])) {
l[v] = to;
r[to] = v;
return 1;
}
}
return 0;
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
Open("cuplaj");
cin >> N >> M >> E;
while(E--) {
cin >> x >> y;
Gr[x].emplace_back(y);
}
do {
ok = 0;
memset(viz, 0, sizeof(viz));
for(int i = 1;i <= N;i++)
if(!l[i] && pair_up(i)) ok = 1;
}while(ok);
for(int i = 1;i <= N;i++)
cnt += (int)(l[i] > 0);
cout << cnt << "\n";
for(int i = 1;i <= N;i++)
if(l[i] > 0) cout << i << " " << l[i] << "\n";
return 0;
}