Pagini recente » Cod sursa (job #1285779) | Rating Taudor Cristian Razvan (razvan_taudor) | Cod sursa (job #24880) | Cod sursa (job #285437) | Cod sursa (job #1246483)
#include <cstdio>
#include <vector>
#define pb push_back
#define Nmax 10010
using namespace std;
vector <int> g[Nmax];
int n,m,e,i,n1,n2,SOL,x,y;
int st[Nmax],dr[Nmax];
bool sel[Nmax];
inline bool cupleaza(int nod)
{
if (sel[nod]) return false;
sel[nod]=true;
for (int i=0;i<g[nod].size();++i)
if (!dr[g[nod][i]])
{
st[nod]=g[nod][i]; dr[g[nod][i]]=nod;
return true;
}
for (int i=0;i<g[nod].size();++i)
if (cupleaza(dr[g[nod][i]]))
{
st[nod]=g[nod][i]; dr[g[nod][i]]=nod;
return true;
}
return false;
}
inline void cuplaj()
{
bool ok=true;
for (;ok;)
{
ok=false;
for (int i=1;i<=n;++i) sel[i]=false;
for (i=1;i<=n;++i)
if (!st[i]) ok|=cupleaza(i);
}
}
int main()
{
freopen("cuplaj.in","r",stdin);
freopen("cuplaj.out","w",stdout);
scanf("%d %d %d", &n, &m, &e);
for (i=1;i<=e;++i)
{
scanf("%d %d", &x, &y);
g[x].pb(y);
}
cuplaj();
for (i=1;i<=n;++i)
if (st[i]) SOL++;
printf("%d\n", SOL);
for (i=1;i<=n;++i)
if (st[i])
printf("%d %d\n", i, st[i]);
return 0;
}