Pagini recente » Cod sursa (job #1764517) | Cod sursa (job #2353949) | Cod sursa (job #1792806) | Cod sursa (job #1221479) | Cod sursa (job #433831)
Cod sursa(job #433831)
#include <stdio.h>
#define IN "cuplaj.in"
#define OUT "cuplaj.out"
#define L 10005
using namespace std;
struct nod
{
int inf;
nod *next;
}*V[L];
int S[L];
int D[L];
int viz[L];
int nrs, nrd, m;
int Rez;
void add(nod *&a,int i)
{
nod *q=new nod;
q->inf=i;
q->next=a;
a=q;
}
void citire()
{
int a, b;
scanf ("%d %d %d",&nrs, &nrd, &m);
while (m--)
{
scanf ("%d %d",&a, &b);
add(V[a], b);
}
}
int ok(int P)
{
if (viz[P])
return 0;
viz[P]=1;
for (nod *i=V[P]; i; i=i->next)
if (S[i->inf]==0 || ok(S[i->inf]))
{
D[P]=i->inf;
S[i->inf]=P;
return 1;
}
return 0;
}
void solve()
{
int K=1;
while (K)
{
K=0;
for (int i=1;i<=nrs;i++)
viz[i]=0;
for (int i=1;i<=nrs;i++)
if (!D[i])
K+=ok(i);
Rez+=K;
}
}
void afisare()
{
printf("%d\n", Rez);
for (int i=1;i<=nrs;i++)
if (D[i])
printf("%d %d\n", i, D[i]);
}
int main ()
{
freopen (IN ,"r", stdin);
freopen (OUT , "w", stdout);
citire();
solve();
afisare();
return 0;
}