Pagini recente » Cod sursa (job #880770) | Cod sursa (job #1242434) | Cod sursa (job #2937826) | Cod sursa (job #120750) | Cod sursa (job #2697845)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("cuplaj.in");
ofstream fout("cuplaj.out");
const int NMAX = 1e4 + 4;
vector<int> G[NMAX];
int l[NMAX], r[NMAX];
bool viz[NMAX];
bool dfs(const int &u) {
if(viz[u])
return false;
viz[u] = true;
for(const int &v : G[u])
if(!r[v]) {
l[u] = v;
r[v] = u;
return true;
}
for(const int &v : G[u])
if(dfs(r[v])) {
l[u] = v;
r[v] = u;
return true;
}
return false;
}
int main() {
int N, M, E;
fin >> N >> M >> E;
while(E--) {
int u, v;
fin >> u >> v;
G[u].emplace_back(v);
}
for(bool change = true; change; ) {
change = false;
memset(viz, false, sizeof(viz));
for(int node = 1; node <= N; ++node)
if(!l[node])
change |= dfs(node);
}
int cuplaj = 0;
for(int i = 1; i <= N; ++i)
cuplaj += (l[i] > 0);
fout << cuplaj << '\n';
for(int i = 1; i <= N; ++i)
if(l[i] > 0)
fout << i << ' ' << l[i] << '\n';
}