Pagini recente » Cod sursa (job #2904108) | Cod sursa (job #2485817) | Cod sursa (job #302250) | Cod sursa (job #829909) | Cod sursa (job #1549577)
#include <fstream>
#include <vector>
#define NMAX 10100
using namespace std;
ifstream fin("cuplaj.in");
ofstream fout("cuplaj.out");
vector<int> v[NMAX];
int n,m,l,viz[NMAX],c[NMAX],c2[NMAX];
bool dfs(int nod)
{
if(viz[nod]) return 0;
unsigned int i;
viz[nod]=1;
for(i=0; i<v[nod].size(); i++)
if(c2[v[nod][i]] == 0)
{
c[nod] = v[nod][i];
c2[v[nod][i]] = n;
return 1;
}
for(i=0; i<v[nod].size(); i++)
if(dfs(v[nod][i]))
{
c[nod] = v[nod][i];
c2[v[nod][i]] = n;
return 1;
}
return 0;
}
int main()
{
int a,b,i;
fin >> n >> m >> l;
for(i=0; i<l; i++)
{
fin >> a >> b;
v[a].push_back(b);
}
int ok = 1;
while(ok)
{
ok=0;
for(i=1; i<=n; i++)
viz[i] = 0;
for(i=1; i<=n; i++)
if(c[i]==0) ok |= dfs(i);
}
int cpmax=0;
for(i=1; i<=n; i++)
if(c[i]!=0) cpmax++;
fout << cpmax << '\n';
for(i=1; i<=n; i++)
if(c[i]!=0) fout << i << ' ' << c[i] << '\n';
return 0;
}