Pagini recente » Cod sursa (job #2063343) | Cod sursa (job #2043836) | Cod sursa (job #2043842) | Cod sursa (job #1958808) | Cod sursa (job #2986895)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ifstream fin("cuplaj.in");
ofstream fout("cuplaj.out");
vector<int> x[100001];
bool p[10001], cuplat[100001];
int y[100001];
bool DFS(int nod)
{if(p[nod]==1)return 0;
p[nod]=1;
vector<int>:: iterator I;
for(I=x[nod].begin();I<x[nod].end();I++)
if(y[*I]==0 || DFS(y[*I]))
{y[*I]=nod;
cuplat[nod]=1;
return 1;
}
return 0;
}
int main()
{ int n, m, k, a, b, nr=0;
bool t=false;
fin>>n>>m>>k;
for(int i=1;i<=k;i++)
{fin>>a>>b;
x[a].push_back(b);
}
while(!t)
{t=true;
for(int i=1;i<=n;i++)
p[i]=0;
for(int i=1;i<=n;i++)
if(cuplat[i]==0 && DFS(i))
{nr++;
t=false;
}
}
fout<<nr<<"\n";
for(int i=1;i<=m;i++)
if(y[i]!=0)fout<<y[i]<<" "<<i<<"\n";
return 0;
}