Pagini recente » Cod sursa (job #921362) | Cod sursa (job #1860368) | Cod sursa (job #2894405) | Cod sursa (job #2716250) | Cod sursa (job #1883657)
#include <fstream>
#include <vector>
#include <cstring>
using namespace std;
ifstream f("cuplaj.in");
ofstream g("cuplaj.out");
int n,m,e,ap[10000],ok,nr=0,rght[10000],lft[10000],i;
vector <int> gr[10000];
vector <int> ::iterator it;
void dload()
{
int i,x,y;
f>>n>>m>>e;
for (i=1;i<=e;i++)f>>x>>y,gr[x].push_back(y);
}
void uload()
{
int i;
for (i=1;i<=n;i++) if (lft[i]>0) nr++;
g<<nr<<'\n';
for (i=1;i<=n;i++) if (lft[i]>0) g<<i<<" "<<lft[i]<<'\n';
}
int cupleaza(int x)
{
if (ap[x]) return 0;
ap[x]++;
for (auto &it: gr[x])
if (!rght[it])
{
lft[x]=it;
rght[it]=x;
return 1;
}
for (auto &it: gr[x])
if (cupleaza(rght[it]))
{
lft[x]=it;
rght[it]=x;
return 1;
}
return 0;
}
int main()
{
dload();
ok=1;
while (ok)
{
ok=0;
memset(ap,0,sizeof(ap));
for (i=1;i<=n;i++) if (!lft[i]) ok+=cupleaza(i);
}
uload();
return 0;
}