Pagini recente » Cod sursa (job #2969472) | Cod sursa (job #2806965) | summer2020 | Cod sursa (job #2669690) | Cod sursa (job #1437502)
#include <fstream>
#include <vector>
#define MAXN 10001
int n, m, e, x, y, left[MAXN], right[MAXN], k;
std::vector<int> graph[MAXN];
bool visited[MAXN], ok;
bool pairup(int vertex)
{
if (visited[vertex])
return false;
visited[vertex]=true;
for (int i=0;i<graph[vertex].size();++i)
{
int neighbour=graph[vertex][i];
if (!right[neighbour] || pairup(right[neighbour]))
{
left[vertex]=neighbour;
right[neighbour]=vertex;
return true;
}
}
return false;
}
int main()
{
int i;
freopen("cuplaj.in", "r", stdin);
freopen("cuplaj.out", "w", stdout);
scanf("%d %d %d", &n, &m, &e);
while (e--)
{
scanf("%d %d", &x, &y);
graph[x].push_back(y);
}
ok=true;
while (ok)
{
ok=false;
for (i=1;i<=n;++i)
visited[i]=false;
for (i=1;i<=n;++i)
{
if (!left[i])
if (pairup(i))
{
ok=true;
k++;
}
}
}
printf("%d\n", k);
for (i=1;i<=n;++i)
if (left[i])
printf("%d %d\n", i, left[i]);
return 0;
}