Pagini recente » Cod sursa (job #2067577) | Cod sursa (job #126556) | Cod sursa (job #2366500) | Cod sursa (job #688824) | Cod sursa (job #1832626)
#include <fstream>
#include <vector>
#include <cstring>
using namespace std;
ifstream fin("cuplaj.in");
ofstream fout("cuplaj.out");
const int NMax = 10000;
vector<int> G[NMax + 5];
int l[NMax + 5], r[NMax + 5], n, m, e;
bool viz[NMax + 5];
bool CPL(int node){
int i, curr_node;
viz[node] = true;
for(i = 0; i < (int)G[node].size(); ++i){
curr_node = G[node][i];
if(r[curr_node] == 0){
l[node] = curr_node;
r[curr_node] = node;
return 1;
}
}
for(i = 0; i < (int)G[node].size(); ++i){
curr_node = G[node][i];
if(viz[r[curr_node]] == false && CPL(r[curr_node])){
l[node] = curr_node;
r[curr_node] = node;
return 1;
}
}
return 0;
}
int main()
{
int i, x, y, cnt = 0;
bool ok = true;
fin>> n >> m >> e;
for(i = 1; i <= e; ++i){
fin>> x >> y;
G[x].push_back(y);
}
while(ok){
ok = false;
memset(viz, 0, sizeof viz);
for(i = 1; i <= n; ++i){
if(l[i] == 0 && CPL(i)){
ok = true;
++cnt;
}
}
}
fout<< cnt << "\n";
for(i = 1; i <= n; ++i){
if(l[i] != 0){
fout<< i << " " << l[i] << "\n";
}
}
return 0;
}