Pagini recente » Cod sursa (job #3123554) | Cod sursa (job #1417410) | Cod sursa (job #2729459) | Cod sursa (job #852759) | Cod sursa (job #1833700)
#include<fstream>
#include<vector>
#include<bitset>
using namespace std;
ifstream in("cuplaj.in");
ofstream out("cuplaj.out");
vector<int> vec[10010];
int Left[10010], Right[10010];
bitset<10010> viz;
bool cuplaj(int x)
{
viz[x] = 1;
for (int i = 0; i < vec[x].size(); ++i)
{
int a = vec[x][i];
if (Right[a] == 0)
{
Right[a] = x;
Left[x] = a;
return true;
}
}
for (int i = 0; i < vec[x].size(); ++i)
{
int a = vec[x][i];
if (viz[Right[a]]==0 && cuplaj(Right[a]) == true)
{
Left[x] = a;
Right[a] = x;
return true;
}
}
return false;
}
int main()
{
int n1, n2, m;
in >> n1 >> n2 >> m;
for (int i = 1; i <= m; ++i)
{
int x, y;
in >> x >> y;
vec[x].push_back(y);
}
int ok, nr = 0;
do
{
ok = 0;
for (int i = 1; i <= n1; ++i)
{
if (Left[i] == 0 && cuplaj(i))
{
++nr;
ok = 1;
viz.reset();
}
}
} while (ok);
out << nr << "\n";
for (int i = 1; i <= n1; ++i)
if(Left[i])
out << i << " " << Left[i] << "\n";
return 0;
}