Pagini recente » Cod sursa (job #878870) | Cod sursa (job #2539971) | Cod sursa (job #1772007) | Cod sursa (job #1446277) | Cod sursa (job #1908093)
#include <cstdio>
#include <vector>
#include <bitset>
using namespace std;
const int nmx = 10002;
int n,m,l;
int d[nmx],s[nmx];
vector <int> g[nmx];
bitset <nmx> viz;
void citire()
{
scanf("%d %d %d", &n, &m, &l);
for(int i = 1; i <= l; ++i)
{
int nod1,nod2;
scanf("%d %d", &nod1, &nod2);
g[nod1].push_back(nod2);
}
}
bool schimba(int nod)
{
if(viz[nod])
return false;
viz[nod] = true;
for(vector<int>::iterator it = g[nod].begin(); it != g[nod].end(); ++it)
if(not d[*it])
{
d[*it] = nod;
s[nod] = *it;
return true;
}
for(vector<int>::iterator it = g[nod].begin(); it != g[nod].end(); ++it)
if(schimba(d[*it]))
{
d[*it] = nod;
s[nod] = *it;
return true;
}
return false;
}
void crearere()
{
bool sch = 1;
while(sch)
{
sch = 0;
viz.reset();
for(int i = 1; i <= n; ++i)
if(not s[i])
sch |= schimba(i);
}
}
void afish()
{
int t = 0;
for(int i = 1; i <= n; ++i)
if(s[i])
++ t;
printf("%d\n", t);
for(int i = 1; i <= n; ++i)
if(s[i])
printf("%d %d\n", i, s[i]);
}
int main()
{
freopen("cuplaj.in", "r", stdin);
freopen("cuplaj.out", "w", stdout);
citire();
crearere();
afish();
return 0;
}