Pagini recente » Cod sursa (job #2882312) | Cod sursa (job #2839594) | Cod sursa (job #79800) | Cod sursa (job #2637146) | Cod sursa (job #3216226)
#include <bits/stdc++.h>
using namespace std;
using vi = vector<int>;
#define eb emplace_back
using ll = long long;
using ld = long double;
ifstream fin("cuplaj.in");
ofstream fout("cuplaj.out");
const int N = 1e4 + 5;
int l[N], r[N], n, m, e;
vi g[N];
bitset<N> vis;
bool cuplaj(int u) {
if (vis[u]) return 0;
vis[u] = 1;
for (auto v:g[u])if(!r[v]){
r[v] = u;
l[u] = v;
return 1;
}
for (auto v:g[u])if(cuplaj(r[v])){
r[v]=u;
l[u]=v;
return 1;
}
return 0;
}
int main() {
ios_base::sync_with_stdio(false);
fin.tie(0);
fout.tie(0);
fin >> n >> m >> e;
for (int u, v, w; e; --e) {
fin >> u >> v;
g[u].eb(v);
}
bool ok = 1;
while (ok) {
vis.reset(); ok = 0;
for (int i = 1; i <= n; ++i)
if (!l[i]) ok |= cuplaj(i);
}
int ans = 0;
for (int i = 1; i <= n; ++i)
if (l[i]) ++ans;
fout << ans << '\n';
for (int i = 1; i <= n; ++i)
if (l[i]) fout << i << ' ' << l[i] << '\n';
}