Pagini recente » Cod sursa (job #3252434) | Cod sursa (job #1946655) | Cod sursa (job #892039) | Cod sursa (job #1477177) | Cod sursa (job #3152070)
#include <bits/stdc++.h>
using namespace std;
ifstream in("cuplaj.in");
ofstream out("cuplaj.out");
int n, m, cnt, x, y;
vector<int> adj[10005];
int l[10005], r[10005];
bool vis[10005];
int pairup(int nod) {
if (vis[nod])
return 0;
vis[nod] = 1;
for (auto i : adj[nod])
if (!r[i]) {
l[nod] = i;
r[i] = nod;
return 1;
}
for (auto i : adj[nod]) {
if (pairup(r[i])) {
l[nod] = i;
r[i] = nod;
return 1;
}
}
return 0;
}
int main()
{
in >> n >> m >> cnt;
for (int i = 1; i <= cnt; i++) {
in >> x >> y;
adj[x].push_back(y);
}
bool change = 1;
while (change == 1) {
change = 0;
memset(vis, 0, sizeof(vis));
for (int i = 1; i <= n; i++)
if (!l[i])
change |= pairup(i);
}
int ans = 0;
for (int i = 1; i <= n; i++)
ans += (l[i] > 0);
out << ans << '\n';
for (int i = 1; i <= n; i++)
if (l[i] > 0)
out << i << " " << l[i] << '\n';
return 0;
}