Pagini recente » Cod sursa (job #3280124) | Cod sursa (job #2475860) | Cod sursa (job #1874059) | Cod sursa (job #1672711) | Cod sursa (job #2484001)
#include <fstream>
#include <cstring>
#include <vector>
using namespace std;
ifstream in("cuplaj.in");
ofstream out("cuplaj.out");
vector <int> G[10101];
bool use[10101];
int st[10101],dr[10101],ans,i,n,x,y,m,k;
int cup(int nod)
{
use[nod]=true;
for (auto i:G[nod])
if (!dr[i])
{
st[nod]=i;
dr[i]=nod;
return 1;
}
for (auto i:G[nod])
{
if (!use[dr[i]]&&cup(dr[i]))
{
st[nod]=i;
dr[i]=nod;
return 1;
}
}
return 0;
}
int cup_ma()
{
bool ok=true;
ans=0;
while (ok)
{
ok=0;
memset(use,false,sizeof(use));
for (i=1;i<=n;++i)
if (!use[i]&&!st[i])
{
ok|=cup(i);
}
}
for (i=1;i<=n;++i) ans+=(st[i]!=0);
return ans;
}
int main()
{
in>>n>>m>>k;
for (i=1;i<=k;++i)
{
in>>x>>y;
G[x].push_back(y);
}
ans=cup_ma();
out<<ans<<'\n';
for (i=1;i<=n;++i)
if (st[i]) out<<i<<" "<<st[i]<<'\n';
return 0;
}