Pagini recente » Cod sursa (job #1840446) | Cod sursa (job #1854696) | Cod sursa (job #1543113) | Cod sursa (job #2070849) | Cod sursa (job #566563)
Cod sursa(job #566563)
#include <fstream>
#include <vector>
using namespace std;
#define DIM 10005
ifstream fi ("cuplaj.in");
ofstream fo ("cuplaj.out");
int N, M, E, L[DIM], R[DIM], viz[DIM], C;
vector <int> V[DIM];
int cuplaj (int n)
{
if (viz[n]) return 0;
viz[n] = 1;
int i, v;
for (i = 0; i < (int)V[n].size(); i++)
if (!R[v = V[n][i]])
{
L[n] = v;
R[v] = n;
return 1;
}
for (i = 0; i < (int)V[n].size(); i++)
if (cuplaj (R[v = V[n][i]]))
{
L[n] = v;
R[v] = n;
return 1;
}
return 0;
}
int main ()
{
fi >> N >> M >> E;
for (int i = 1, a, b; i <= E; i++)
{
fi >> a >> b;
V[a].push_back (b);
}
int c = 1;
while (c)
{
c = 0;
memset (viz, 0, sizeof(viz));
for (int i = 1; i <= N; i++)
if (!L[i])
c += cuplaj (i);
C += c;
}
fo << C << '\n';
for (int i = 1; i <= N; i++)
if (L[i]) fo << i << ' ' << L[i] << '\n';
return 0;
}