Pagini recente » Cod sursa (job #297650) | Cod sursa (job #2646015) | Cod sursa (job #2633783) | Cod sursa (job #2436164) | Cod sursa (job #1675506)
#include <fstream>
#include <vector>
using namespace std;
ifstream cin("cuplaj.in");
ofstream cout("cuplaj.out");
#define MAXN 10005
vector<int> graf[MAXN];
int st[MAXN], dr[MAXN];
bool viz[MAXN];
int n, m, k, nrc;
bool cuplaj(int nod)
{
int i, urm;
if(viz[nod])
return 0;
viz[nod] = true;
for(i=0; i<graf[nod].size(); i++)
{
urm = graf[nod][i];
if(!dr[urm] || cuplaj( dr[urm] ))
{
st[nod] = urm;
dr[urm] = nod;
return 1;
}
}
return 0;
}
int main()
{
int i, j, x, y, ok;
cin>> n >> m >> k;
for(i=1; i<=k; i++)
{
cin>>x>>y;
graf[x].push_back(y);
}
ok = 1;
while(ok)
{
ok = 0 ;
for(i=1; i<=n; i++)
viz[i] = 0;
for(i=1; i<=n; i++)
if(!st[i]) // Daca inca nu este cuplat
ok+=cuplaj(i);
}
for(i=1; i<=n; i++)
if(st[i])
nrc++;
cout<<nrc<<"\n";
for(i=1; i<=n; i++)
if(st[i])
cout<<i<<" "<<st[i]<<"\n";
return 0;
}