Pagini recente » Cod sursa (job #2932186) | Cod sursa (job #1646886) | Cod sursa (job #882026) | Cod sursa (job #324480) | Cod sursa (job #1549358)
#include <fstream>
#include <vector>
#define NMAX 20004
using namespace std;
ifstream fin("cuplaj.in");
ofstream fout("cuplaj.out");
vector <int> G[NMAX];
int n, na;
int c[NMAX], viz[NMAX];
int dfs(int x);
int main()
{
int x, y,m,a,b;
fin >> x >> y;
n = x + y; na = x;
fin >> m;
while (m)
{
fin >> a >> b;
b += na;
G[a].push_back(b);
G[b].push_back(a);
m--;
}
int ok = 1;
while (ok)
{
ok = 0;
for (int i = 1; i <= n; i++)
viz[i] = 0;
for (int i = 1; i <= na; i++)
if (!viz[i] && !c[i])
if (dfs(i) ) ok = 1;
}
int nr = 0;
for (int i = 1; i <= na; i++)
if (c[i]) nr++;
fout << nr << '\n';
for (int i = 1; i <= na; i++)
if (c[i])
fout << i << ' ' << c[i] - na << '\n';
}
int dfs(int x)
{
viz[x] = 1;
for (int i = 0; i < G[x].size(); i++)
{
int k = G[x][i];
if (viz[k] || c[x] == k) continue;
if (c[k] == 0)
{
viz[k] = 1; c[k] = x; c[x] = k; return 1;
}
viz[k] = 1;
if (dfs(c[k]))
{
c[x] = k; c[k] = x; return 1;
}
}
return 0;
}