Pagini recente » Cod sursa (job #2752323) | Cod sursa (job #1324212) | Cod sursa (job #54809) | Cod sursa (job #2770356) | Cod sursa (job #3220178)
#ifndef LOCAL
#pragma GCC optimize("O3")
#pragma GCC target("avx2")
#endif
#ifdef LOCAL
#define _GLIBCXX_DEBUG
#endif
#include <bits/stdc++.h>
#define pb push_back
#define pii pair<int, int>
using ll = long long;
using ci = const int;
using cll = const long long;
using namespace std;
const int NMAX = 1e4 + 5;
/*******************************/
// INPUT / OUTPUT
#ifndef LOCAL
ifstream in("cuplaj.in");
ofstream out("cuplaj.out");
#define cin in
#define cout out
#endif
/*******************************/
/// GLOBAL DECLARATIONS
int N, M, K;
int ans;
bool vis[NMAX];
int st[NMAX], dr[NMAX];
vector <int> adj[NMAX];
/*******************************/
/// FUNCTIONS
void ReadInput();
void Solution();
void Output();
/*******************************/
///-------------------------------------
inline void ReadInput()
{
cin >> N >> M >> K;
int a, b;
for (int i = 0 ; i < K ; ++ i)
{
cin >> a >> b;
adj[a].push_back(b);
}
}
///-------------------------------------
inline bool cupleaza(int node)
{
if (vis[node]) return false;
vis[node] = true;
for (auto u: adj[node])
{
if (!st[u])
{
dr[node] = u;
st[u] = node;
return true;
}
}
for (auto u: adj[node])
{
if (st[u] && cupleaza(st[u]))
{
dr[node] = u;
st[u] = node;
return true;
}
}
return false;
}
///-------------------------------------
inline void Solution()
{
bool run = true;
while (run)
{
for (int i = 1 ; i <= N ; ++ i)
vis[i] = false;
run = false;
for (int i = 1 ; i <= N ; ++ i)
{
if (!dr[i] && cupleaza(i))
{
ans ++;
run = true;
}
}
}
}
///-------------------------------------
inline void Output()
{
cout << ans << "\n";
for (int i = 1 ; i <= N ; ++ i)
if (dr[i])
cout << i << " " << dr[i] << "\n";
}
///-------------------------------------
int main()
{
#ifndef LOCAL
ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
#endif
ReadInput();
Solution();
Output();
return 0;
}