Pagini recente » Cod sursa (job #2670577) | Cod sursa (job #3278924) | Cod sursa (job #2474416) | Cod sursa (job #3260933) | Cod sursa (job #2572027)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("cuplaj.in");
ofstream fout("cuplaj.out");
const int CARD_MAX = 1e4 + 1;
int N, M, E, L[CARD_MAX], R[CARD_MAX];
bool used[CARD_MAX];
vector<vector<int>> graph(CARD_MAX, vector<int>());
bool pair_up(int left_node)
{
if(used[left_node] == true) return false;
used[left_node] = true;
for(auto& right_node : graph[left_node])
{
if(L[right_node] == 0)
{
L[right_node] = left_node;
R[left_node] = right_node;
return true;
}
}
for(auto& right_node : graph[left_node])
{
if(pair_up(L[right_node]) == true)
{
L[right_node] = left_node;
R[left_node] = right_node;
return true;
}
}
return false;
}
int main()
{
fin >> N >> M >> E;
for(int i = 1; i <= E; ++i)
{
int u, v;
fin >> u >> v;
graph[u].push_back(v);
}
int coupling_cardinal = 0;
bool no_change = false;
while(no_change == false)
{
no_change = true;
fill(used + 1, used + N + 1, false);
for(int i = 1; i <= N; ++i)
{
if(R[i] != 0) continue;
if(pair_up(i) == true)
{
no_change = false;
++coupling_cardinal;
}
}
}
fout << coupling_cardinal << '\n';
for(int i = 1; i <= N; ++i)
{
if(R[i] == 0) continue;
fout << i << ' ' << R[i] << '\n';
}
}