Pagini recente » Cod sursa (job #2214134) | Cod sursa (job #2153163) | Cod sursa (job #1194514) | Cod sursa (job #468731) | Cod sursa (job #2971864)
#include <fstream>
#include <vector>
const int NMAX=10005;
using namespace std;
ifstream fin("cuplaj.in");
ofstream fout("cuplaj.out");
vector <int> v[NMAX];
int p[NMAX];
bool f[NMAX], cplt[NMAX];
int l, r, m, nr;
bool dfs(int);
int main()
{
bool ok=true;
int i, a, b;
fin>>l>>r>>m;
for(i=1; i<=m; i++)
{
fin>>a>>b;
v[a].push_back(b);
}
while(ok)
{
ok=false;
for(i=1; i<=l; i++) f[i]=false;
for(i=1; i<=l; i++)
{
if(cplt[i]==false && dfs(i))
{
nr++;
ok=true;
}
}
}
fout<<nr<<'\n';
for(i=1; i<=r; i++)
{
if(p[i]) fout<<p[i]<<' '<<i<<'\n';
}
return 0;
}
bool dfs(int nod)
{
f[nod]=true;
for(auto i:v[nod])
{
if(!p[i] || (!f[p[i]] && dfs(p[i])))
{
p[i]=nod;
cplt[nod]=true;
return true;
}
}
return false;
}