Pagini recente » Cod sursa (job #2321792) | Cod sursa (job #135950) | Cod sursa (job #2986925) | Cod sursa (job #704413) | Cod sursa (job #414965)
Cod sursa(job #414965)
#include <stdio.h>
#include <vector>
#define IN "cuplaj.in"
#define OUT "cuplaj.out"
#define Size 10010
using namespace std;
int S[Size],D[Size];
int viz[Size];
int nrS,nrD;
int M,ok,Numar;
vector <int> Nod[Size];
void citire()
{
int s,d;
scanf ("%d %d %d",&nrS,&nrD,&M);
for (;M;M--)
{
scanf ("%d %d",&s,&d);
Nod[s].push_back(d);
}
}
int fiind(int ns)
{
if (viz[ns])
return 0;
viz[ns]=1;
for (int i=0;i<Nod[ns].size();i++)
if (!S[Nod[ns][i]])
{
S[Nod[ns][i]]=ns;
D[ns]=Nod[ns][i];
return 1;
}
for (int i=0;i<Nod[ns].size();i++)
if (S[Nod[ns][i]])
if (fiind(S[Nod[ns][i]]))
{
S[Nod[ns][i]]=ns;
D[ns]=Nod[ns][i];
return 1;
}
return 0;
}
void solve()
{
ok=1;
while (ok)
{
for (int i=1;i<=nrS;i++)
viz[i]=0;
ok=0;
for (int i=1;i<=nrS;i++)
if (!D[i])
ok+=fiind(i);
Numar+=ok;
}
}
void afish()
{
printf("%d\n",Numar);
for (int i=1;i<=nrS;i++)
if (D[i])
printf("%d %d\n",i,D[i]);
printf("\n");
}
int main ()
{
freopen (IN ,"r",stdin);
freopen (OUT ,"w",stdout);
citire();
solve();
afish();
return 0;
}