Pagini recente » Cod sursa (job #1116245) | Cod sursa (job #2641003) | Cod sursa (job #799640) | Cod sursa (job #669978) | Cod sursa (job #1400216)
#include <fstream>
#include<vector>
using namespace std;
ifstream fin("cuplaj.in");
ofstream fout("cuplaj.out");
int n,m,muchii,i,sol,a,b;
int l[10010],r[10010];
vector<int> v[10010];
bool vizitat[10010],ok;
bool cuplaj(int x)
{
if(vizitat[x]) return false;
vizitat[x]=true;
for(int i=0;i<(int)v[x].size();++i)
{
int y=v[x][i];
if(r[y]==0)//nu e cuplat
{
r[y]=x;
l[x]=y;
return true;
}
}
for(int i=0;i<(int)v[x].size();++i)
{
int y=v[x][i];
if(cuplaj(r[y])) // nodul poate fi recuplat
{
r[y]=x;
l[x]=y;
return true;
}
}
return false;
}
int main()
{
fin>>n>>m>>muchii;
for(i=1;i<=muchii;++i)
{
fin>>a>>b;
v[a].push_back(b);
}
ok=true;
while(ok) //cat timp s-a mai cuplat ceva mai incercam
{
ok=false;
for(i=1;i<=n;++i)
vizitat[i]=0;
for(i=1;i<=n;++i)
{
if(l[i]==0)
{
if(cuplaj(i))
{
ok=true;
}
}
}
}
for(i=1;i<=n;++i)
{
if(l[i])
sol++;
}
fout<<sol<<'\n';
for(i=1;i<=n;++i)
{
if(l[i])
fout<<i<<" "<<l[i]<<'\n';
}
return 0;
}