Pagini recente » Cod sursa (job #2584416) | Cod sursa (job #315673) | Cod sursa (job #2896014) | Cod sursa (job #3218963) | Cod sursa (job #243378)
Cod sursa(job #243378)
#include <cstdio>
#include <vector>
using namespace std;
#define MAX_N 10005
#define foreach(V) for (vector <int>::iterator it = (V).begin(); it != (V).end(); ++it)
int N, M, NR;
vector <int> G[MAX_N];
bool viz[MAX_N];
int C[MAX_N], R[MAX_N];
void citire()
{
scanf("%d %d %d",&N, &M, &NR);
for(;NR;NR--)
{
int x, y;
scanf("%d %d",&x, &y);
G[x].push_back(y);
}
}
bool pairup(int nod)
{
if(viz[nod]) return false;
viz[nod] = true;
foreach(G[nod])
if(!R[*it])
{
C[nod] = *it;
R[*it] = nod;
return 1;
}
foreach(G[nod])
if(pairup(R[*it]))
{
C[nod] = *it;
R[*it] = nod;
return 1;
}
return 0;
}
void solve()
{
for(bool ok = 1; ok;)
{
ok = 0;
memset (viz, 0, sizeof viz);
for(int i = 1; i <= N; ++i)
if(C[i] == 0)
ok |= pairup(i);
}
int Rez = 0;
for(int i = 1; i <= N; ++i)
if(C[i])
++Rez;
printf("%d\n",Rez);
for(int i = 1; i <= N; ++i)
if(C[i])
printf("%d %d\n",i, C[i]);
}
int main()
{
freopen("cuplaj.in","rt",stdin);
freopen("cuplaj.out","wt",stdout);
citire();
solve();
}