Pagini recente » Cod sursa (job #959970) | Cod sursa (job #95041) | Cod sursa (job #346747) | Cod sursa (job #1213858) | Cod sursa (job #2960129)
#include <fstream>
#include <vector>
#include <climits>
using namespace std;
vector<int> gf[10001];
bool ok, viz[10001];
int n, m, e, x, y, p[10001], contor;
ifstream f("cuplaj.in");
ofstream g("cuplaj.out");
bool pereche(int nod)
{
viz[nod] = true;
for(int aux : gf[nod])
{
if(p[aux] == 0)
{
p[nod] = aux;
p[aux] = nod;
return true;
}
if(!viz[p[aux]] && pereche(p[aux]))
{
p[nod] = aux;
p[aux] = nod;
return true;
}
}
return false;
}
int main()
{
f>>n>>m>>e;
for(int i = 0; i < e; ++i)
{
f>>x>>y;
y += n;
gf[x].push_back(y);
gf[y].push_back(x);
}
do
{
ok = false;
for(int i = 1; i <= n; ++i)
if(!viz[i] && !p[i] && pereche(i))
{
contor++;
ok = true;
}
for(int i = 1; i <= n + m; ++i)
viz[i] = false;
} while(ok);
g<<contor<<"\n";
for(int i = 1; i <= n; ++i)
if(p[i])
g<<i<<' '<<p[i] - n<<"\n";
}