Pagini recente » Cod sursa (job #937004) | Cod sursa (job #3032689) | Cod sursa (job #336960) | Cod sursa (job #432615) | Cod sursa (job #2028392)
#include <fstream>
#include <vector>
#define VAL 10005
using namespace std;
ifstream fin("cuplaj.in");
ofstream fout("cuplaj.out");
int N, M, E, i, j, A, B;
int L[VAL], R[VAL], ANS;
bool ok[VAL], nemodif;
vector <int> G[VAL];
bool Cuplaj(int nod)
{
vector <int> :: iterator it;
int nod2;
if (ok[nod]==true)
return false;
ok[nod]=true;
for (it=G[nod].begin(); it!=G[nod].end(); it++)
{
nod2=*it;
if (R[nod2]==0)
{
L[nod]=nod2;
R[nod2]=nod;
ANS++;
return true;
}
}
for (it=G[nod].begin(); it!=G[nod].end(); it++)
{
nod2=*it;
if (Cuplaj(R[nod2])==true)
{
L[nod]=nod2;
R[nod2]=nod;
return true;
}
}
return false;
}
int main()
{
fin >> N >> M >> E;
for (i=1; i<=E; i++)
{
fin >> A >> B;
G[A].push_back(B);
}
while (nemodif==false)
{
nemodif=true;
for (i=1; i<=N; i++)
ok[i]=false;
for (i=1; i<=N; i++)
if (L[i]==0 && Cuplaj(i)==true)
nemodif=false;
}
fout << ANS << '\n';
for (i=1; i<=N; i++)
if (L[i]>0)
fout << i << " " << L[i] << '\n';
fin.close();
fout.close();
return 0;
}