Pagini recente » Cod sursa (job #2358853) | Cod sursa (job #2513731) | Cod sursa (job #1001349) | Cod sursa (job #1984487) | Cod sursa (job #3251244)
#include <bits/stdc++.h>
using namespace std;
ifstream in("cuplaj.in");
ofstream out("cuplaj.out");
int b[10001], f[10001];
vector <int> gb[10001], gf[10001];
vector <int> viz(10001, 0);
bool cupleaza(int fata)
{
if(viz[fata])
return false;
viz[fata] = 1;
for(int vb : gf[fata])
{
if(!b[vb])
{
b[vb] = fata;
f[fata] = vb;
return true;
}
}
for(int vb : gf[fata])
{
if(cupleaza(b[vb]))
{
b[vb] = fata;
f[fata] = vb;
return true;
}
}
return false;
}
int nfete, mbaieti, m;
void cit()
{
in >> nfete >> mbaieti >> m;
for(int i = 1; i <= m; i++)
{
int x, y;
in >> x >> y;
gb[y].push_back(x);
gf[x].push_back(y);
}
}
int ans;
void rez()
{
bool aux = true;
while(aux)
{
aux = false;
fill(viz.begin(), viz.end(), 0);
for(int i = 1; i <= nfete; i++)
{
if(f[i] != 0)
{
continue;
}
if(cupleaza(i))
aux = true;
}
}
out << nfete - count(f + 1, f + nfete + 1, 0)<<'\n';
for ( int i = 1 ; i <= nfete ; i++ )
{
if ( f[i] )
{
out<<i<<" "<<f[i]<<"\n";
}
}
}
int main()
{
cit();
rez();
return 0;
}