Pagini recente » Cod sursa (job #2587238) | Cod sursa (job #2971278) | Cod sursa (job #972249) | Cod sursa (job #2497308) | Cod sursa (job #1914481)
#include <iostream>
#include <cstdio>
#include <bitset>
#include <vector>
#define N 10005
using namespace std;
int n, m, L[N], R[N], ok;
vector <int> G[N];
bitset <N> viz;
int cuplaj(int x)
{
if(viz[x])
{
return 0;
}
viz[x] = true;
vector <int>::iterator it;
for(it = G[x].begin() ; it != G[x].end() ; ++it)
{
if(!L[*it] || cuplaj(L[*it]))
{
R[x] = *it;
L[*it] = x;
return 1;
}
}
return 0;
}
void afisare()
{
int nr = 0;
for(int i = 1 ; i <= n ; ++i)
{
if(R[i])
{
nr++;
}
}
printf("%d\n",nr);
for(int i = 1 ; i <= n ; ++i)
{
if(R[i])
{
printf("%d %d\n",i,R[i]);
}
}
}
void citire()
{
int tmp;
scanf("%d %d %d\n",&n,&m,&tmp);
int a, b;
for(int i = 0 ; i < tmp ; ++i)
{
scanf("%d %d\n",&a,&b);
G[a].push_back(b);
}
ok = 1;
while(ok)
{
ok = 0;
viz.reset();
for(int i = 1 ; i <= n ; ++i)
{
if(!R[i])
{
ok = cuplaj(i);
}
}
}
afisare();
}
int main()
{
freopen("cuplaj.in","r",stdin);
freopen("cuplaj.out","w",stdout);
citire();
return 0;
}