Pagini recente » Cod sursa (job #366445) | Cod sursa (job #241447) | Cod sursa (job #1576688) | Cod sursa (job #11258) | Cod sursa (job #2720440)
#include <fstream>
#include <cstring>
#include <vector>
using namespace std;
ifstream cin ("cuplaj.in");
ofstream cout ("cuplaj.out");
int n, m, e, nrc;
int c[2][10005];
bool used[10005];
vector <int> l[10005], r[10005];
bool cupleaza(int node)
{
used[node] = true;
for(auto it = l[node].begin(); it != l[node].end(); ++it)
{
if(!c[1][*it] || (used[c[1][*it]] == false && cupleaza(c[1][*it]) == true))
{
c[1][*it] = node;
c[0][node] = *it;
return 1;
}
}
return 0;
}
int main()
{
cin >> n >> m >> e;
for(int i = 1; i <= e; ++i)
{
int a, b;
cin >> a >> b;
l[a].push_back(b);
r[b].push_back(a);
}
int changed = true;
while(changed)
{
memset(used, 0, sizeof used);
changed = false;
for(int i = 1; i <= n; ++i)
{
if(!c[0][i])
{
cupleaza(i);
if(c[0][i])
++nrc, changed = true;
}
}
}
cout << nrc << '\n';
for(int i = 1; i <= n; ++i)
{
if(c[0][i])
{
cout << i << ' ' << c[0][i] << '\n';
}
}
return 0;
}