Pagini recente » Cod sursa (job #149931) | Cod sursa (job #1881719) | Cod sursa (job #2395396) | Cod sursa (job #534780) | Cod sursa (job #2482406)
#include <fstream>
#include <vector>
using namespace std;
ifstream f("cuplaj.in");
ofstream g("cuplaj.out");
bool marked[10005];
vector <int> G[10005];
int n,m,x,y,nr,i,k,r[10005],l[10005];
bool cupleaza(int nod)
{
marked[nod]=true;
for(auto it : G[nod])
if(!r[it])
{
l[nod]=it;
r[it]=nod;
return true;
}
for(auto it : G[nod])
{
if(!marked[r[it]] && cupleaza(r[it]))
{
l[nod]=it;
r[it]=nod;
return true;
}
}
return false;
}
int main()
{
f>>n>>m>>k;
for(int i=1; i<=k; ++i)
{
f>>x>>y;
G[x].push_back(y);
}
bool done = true;
while(done)
{
done=false;
for(i=1; i<=n; i++)
marked[i]=false;
for(int i=1; i<=n; i++)
{
if(!marked[i] && !l[i])
if(cupleaza(i))
done=true;
}
}
for(i=1; i<=n; i++)
if(l[i])
nr++;
g<<nr<<'\n';
for(i=1; i<=n; i++)
if(l[i])
g<<i<<' '<<l[i]<<'\n';
return 0;
}