Pagini recente » Cod sursa (job #1078674) | Cod sursa (job #540774) | Cod sursa (job #1169427) | Cod sursa (job #2198407) | Cod sursa (job #1833696)
#include<fstream>
#include<vector>
using namespace std;
ifstream in("cuplaj.in");
ofstream out("cuplaj.out");
vector<int> vec[10010];
int Left[10010], Right[10010], viz[10010];
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]]] && 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;
for (int i = 1; i <= n1; ++i)
viz[i] = 0;
}
}
} while (ok);
out << nr << "\n";
for (int i = 1; i <= n1; ++i)
if(Left[i])
out << i << " " << Left[i] << "\n";
return 0;
}