Pagini recente » Cod sursa (job #1030265) | Cod sursa (job #2617887) | Cod sursa (job #1003925) | Cod sursa (job #829611) | Cod sursa (job #2373238)
#include <fstream>
#include <vector>
#include <algorithm>
#include <queue>
using namespace std;
ifstream fin("cuplaj.in");
ofstream fout("cuplaj.out");
const int VAL=10005;
int N, M, i, j, A, B, E;
int L[VAL], R[VAL], ANS;
bool nemodif, tried[VAL];
vector <int> G[VAL];
vector <int> :: iterator it;
bool PairUP(int nod)
{
if (tried[nod]==true)
return false;
tried[nod]=true;
vector <int> :: iterator it;
for (it=G[nod].begin(); it!=G[nod].end(); it++)
{
if (L[*it]==0)
{
R[nod]=*it;
L[*it]=nod;
ANS++;
return true;
}
}
for (it=G[nod].begin(); it!=G[nod].end(); it++)
{
if (PairUP(L[*it])==true)
{
R[nod]=*it;
L[*it]=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 (1)
{
nemodif=true;
for (i=1; i<=N; i++)
tried[i]=false;
for (i=1; i<=N; i++)
if (R[i]==0 && PairUP(i)==true)
nemodif=false;
if (nemodif==true)
break;
}
fout << ANS << '\n';
for (i=1; i<=N; i++)
if (R[i]>0)
fout << i << " " << R[i] << '\n';
fin.close();
fout.close();
return 0;
}