Pagini recente » Cod sursa (job #1111906) | Cod sursa (job #1934680) | Cod sursa (job #1457784) | Cod sursa (job #111334) | Cod sursa (job #2960257)
#include <bits/stdc++.h>
using namespace std;
ifstream in("cuplaj.in");
ofstream out("cuplaj.out");
int noduri1, noduri2, muchii;
int st[10010];//nodurile din multimea stanga pt cuplaj;
int dr[10010];//nodurile din multimea dreapta pt cuplaj;
int viz[10010];
vector<int>vecini[10010];
int i, ok=1, cupl=0;
int cuplaj(int nod)
{
int i;
if (viz[nod]==1) return 0;
viz[nod]=1;
for ( i=0; i<vecini[nod].size(); i++)
{
int a=vecini[nod][i];
if (dr[a]==0)
{
dr[a]=nod;
st[nod]=a;
return 1;
}
}
for ( i=0; i<vecini[nod].size(); i++)
{
int a=vecini[nod][i];
if (cuplaj(dr[a]))
{
dr[a]=nod;
st[nod]=a;
return 1;
}
}
return 0;
}
int main()
{
in>>noduri1>>noduri2>>muchii;
for (i=0; i<muchii; i++)
{
int nod1, nod2;
in>>nod1>>nod2;
vecini[nod1].push_back(nod2);
}
for(ok=1; ok; )
{
ok=0;
memset(viz,0,sizeof(viz));
for (i=1; i<=noduri1; i++)
if (st[i]==0)//nu e in cuplaj
ok= ok | cuplaj(i);
}
for (i=1; i<=noduri1; i++)
if (st[i]>0) cupl++;
out<<cupl<<'\n';
for (i=1; i<=noduri1; i++)
if (st[i]>0) out<<i<<' '<<st[i]<<'\n';
return 0;
}