Pagini recente » Cod sursa (job #422354) | Cod sursa (job #2472935) | Cod sursa (job #755174) | Cod sursa (job #37895) | Cod sursa (job #1567915)
#include <bits/stdc++.h>
#define NR 10005
using namespace std;
vector<int> V[NR];
int perA[NR];
int perB[NR];
bool viz[NR];
bool dfs(int node) {
viz[node] = true;
for(int i = 0; i < V[node].size(); i ++) {
int now = V[node][i];
if(!perB[now]) {
perA[node] = now;
perB[now] = node;
return true;
}
}
for(int i = 0; i < V[node].size(); i ++) {
int now = V[node][i];
if(!viz[perB[now]] && dfs(perB[now])) {
perA[node] = now;
perB[now] = node;
return true;
}
}
return false;
}
int main()
{
ifstream d("cuplaj.in");
ofstream g("cuplaj.out");
int n, m, E, x, y; d >> n >> m >> E;
for(int i = 1; i <= E; i ++) {
d >> x >> y;
V[x].push_back(y);
}
for(int i = 1, j = 0; i <= n; i ++, j = 0) {
for(j = 0; j < V[i].size() && perB[V[i][j]]; j ++);
if(j < V[i].size()) j = V[i][j], perA[i] = j, perB[j] = i;
}
for(int i = 1; i <= n; i ++) {
if(!perA[i]) {
dfs(i);
memset(viz, false, n);
}
}
int k = 0;
for(int i = 1; i <= n; i ++) if(perA[i]) k ++;
g << k << "\n";
for(int i = 1; i <= n; i ++)
if(perA[i]) g << i << " " << perA[i] << "\n";
return 0;
}