Pagini recente » Cod sursa (job #2894880) | Cod sursa (job #1260664) | Cod sursa (job #965861) | Cod sursa (job #1539666) | Cod sursa (job #1380043)
#include <fstream>
#include <vector>
using namespace std;
#define NMax 10005
ifstream f("cuplaj.in");
ofstream g("cuplaj.out");
int n,m,e;
vector<int> v[NMax];
bool viz[NMax];
int R[NMax],L[NMax];
int pairup(int x)
{
if(viz[x]) return 0;
viz[x] = true;
for(int i=0;i<v[x].size();++i) if(!R[v[x][i]])
{
R[v[x][i]] = x;
L[x] = v[x][i];
return 1;
}
for(int i=0;i<v[x].size();++i) if(pairup(R[v[x][i]]))
{
R[v[x][i]] = x;
L[x] = v[x][i];
return 1;
}
return 0;
}
int main()
{
int i,a,b;
f>>n>>m>>e;
for(i=1;i<=e;++i)
{
f>>a>>b;
v[a].push_back(b);
}
int change = 1;
while(change)
{
change = 0;
for(i=1;i<=n;++i) viz[i] = false;
for(i=1;i<=n;++i) if(!L[i]) change|=pairup(i);
}
int cup = 0;
for(i=1;i<=n;++i) if(L[i]) cup++;
g<<cup<<"\n";
for(i=1;i<=n;++i) if(L[i]) g<<i<<" "<<L[i]<<"\n";
f.close();
g.close();
return 0;
}