Pagini recente » Cod sursa (job #2723776) | Cod sursa (job #1587810) | Cod sursa (job #882797) | Cod sursa (job #1021139) | Cod sursa (job #1833697)
#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)
if (Right[vec[x][i]] == 0)
{
Right[vec[x][i]] = x;
Left[x] = vec[x][i];
return true;
}
for (int i = 0; i < vec[x].size(); ++i)
{
if (viz[Right[vec[x][i]]]==00 && cuplaj(Right[vec[x][i]]) == true)
{
Left[x] = vec[x][i];
Right[vec[x][i]] = 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;
}