Pagini recente » Cod sursa (job #1577574) | Cod sursa (job #3261436) | Cod sursa (job #2748731) | Cod sursa (job #272152) | Cod sursa (job #2777618)
#include <fstream>
#include <string.h>
#include <vector>
#define NMAX 10005
using namespace std;
/********************************/
/// INPUT / OUTPUT
ifstream f("cuplaj.in");
ofstream g("cuplaj.out");
/********************************/
/// GLOBAL DECLARATIONS
int N, M, E;
int ans;
int l[NMAX], r[NMAX];
bool visited[NMAX];
vector<int> adj[NMAX];
/********************************/
/// FUNCTIONS
void ReadInput();
void Solution();
void Output();
/********************************/
///--------------------------------------------
inline void ReadInput()
{
f >> N >> M >> E;
for (int i = 1; i <= E; ++i)
{
int u, v;
f >> u >> v;
adj[u].push_back(v);
}
}
///--------------------------------------------
bool PairUp(int node)
{
if (visited[node])
return 0;
visited[node] = 1;
for (auto u : adj[node])
{
if (!l[u])
{
l[u] = node;
r[node] = u;
return 1;
}
}
for (auto u : adj[node])
{
if (l[u] && PairUp(l[u]))
{
l[u] = node;
r[node] = u;
return 1;
}
}
return 0;
}
///--------------------------------------------
inline void Solution()
{
while (true)
{
bool run = false;
memset(visited, 0, sizeof(visited));
for (int i = 1; i <= N; ++i)
{
if (!r[i] && PairUp(i))
{
run = true;
ans ++;
}
}
if (!run)
break;
}
}
///--------------------------------------------
inline void Output()
{
g << ans << "\n";
for (int i = 1 ; i <= N ; ++ i)
if (r[i]) g << i << " " << r[i] << "\n";
}
///--------------------------------------------
int main()
{
ReadInput();
Solution();
Output();
return 0;
}