Pagini recente » Cod sursa (job #1285345) | Cod sursa (job #2667117) | Cod sursa (job #1773534) | Profil StarGold2 | Cod sursa (job #387232)
Cod sursa(job #387232)
using namespace std;
#include<cstdio>
#include<fstream>
#define MAX 10001
struct nod{
int info;
nod * next;
};
nod *G[MAX];
int u[MAX], L[MAX], R[MAX], cuplaj, n, m;
void citire()
{
int i,nrm,x,y;
nod *p;
ifstream fin("cuplaj.in");
fin>>n>>m>>nrm;
for(i=1;i<=n;i++)
G[i]=NULL;
for(i=1;i<=nrm;i++)
{
p=new nod;
fin>>x>>y;
p->info=y;
p->next=G[x];
G[x]=p;
}
}
int pereche(int x)
{
if(u[x])
return 0;
u[x]=1;
for(nod *p=G[x];p;p=p->next)
{
int i=p->info;
if(R[i]==0 || pereche(R[i]))
{
L[x]=i;
R[i]=x;
return 1;
}
}
return 0;
}
void cupleaza()
{
int gata=0,i;
cuplaj=0;
while(!gata)
{
gata=1;
for(i=1;i<=n;i++)
u[i]=0;
for(i=1;i<=n;i++)
if(L[i]==0)
if(pereche(i))
cuplaj++,gata=0;
}
}
void afis()
{
int i;
freopen("cuplaj.out","w",stdout);
printf("%d\n",cuplaj);
for(i=1;i<=n; i++)
if(L[i])
printf("%d %d\n", i, L[i]);
}
int main()
{
citire();
cupleaza();
afis();
}