Pagini recente » Cod sursa (job #1970323) | Cod sursa (job #1300417) | Cod sursa (job #2124521) | Cod sursa (job #2028062) | Cod sursa (job #1970327)
#include <cstdio>
#include <vector>
#include <algorithm>
#include <cstring>
using namespace std;
const char iname[] = "cuplaj.in";
const char oname[] = "cuplaj.out";
#define NMAX 10005
vector <int> G[NMAX];
int l[NMAX],r[NMAX],viz[NMAX];
int pairup(int nod)
{
if(viz[nod]) return 0;
viz[nod] = 1;
for(int i = 0;i<G[nod].size();i++)
if(!r[G[nod][i]])
{
l[nod] = G[nod][i];
r[G[nod][i]] = nod;
return 1;
}
for(int i =0;i< G[nod].size();i++)
if(pairup(r[G[nod][i]]))
{
l[nod] = G[nod][i];
r[G[nod][i]] = nod;
return 1;
}
return 0;
}
int main(void)
{
int n,m,e,a,b;
freopen(iname, "r", stdin);
freopen(oname, "w", stdout);
scanf("%d%d%d",&n,&m,&e);
for(;e--;)
{
scanf("%d%d",&a,&b);
G[a].push_back(b);
}
int cuplaj = 0,ok=1;
while(ok)
{
ok=0;
memset(viz,0,sizeof(viz));
for(int i=1;i<=n;i++)
if(!l[i])
if(pairup(i))
ok=1;
}
for(int i=1;i<=n;i++) if(l[i]) cuplaj++;
printf("%d\n",cuplaj);
for(int i=1;i<=n;i++)
if(l[i]) printf("%d %d\n",i,l[i]);
}