Pagini recente » Cod sursa (job #2294096) | Cod sursa (job #1849936) | Cod sursa (job #1654376) | Cod sursa (job #445226) | Cod sursa (job #950225)
Cod sursa(job #950225)
#include <fstream>
#include <vector>
#include <string.h>
#define MAXN 10002
using namespace std;
ifstream fin("cuplaj.in");
ofstream fout("cuplaj.out");
vector<int> lv[MAXN];
int m1[MAXN], m2[MAXN];
bool v[MAXN];
int cuplaj(int nod)
{
if( v[nod] ) return 0;
v[nod] = 1;
int i,x,l;
l=lv[nod].size();
for(i = 0; i < l; i++ )
{
x = lv[nod][i];
if(!m2[x])
{
m2[x]=nod;
m1[nod]=x;
return 1;
}
}
for(i = 0; i < l; i++ )
{
x = lv[nod][i];
if(cuplaj(m2[x]))
{
m2[x]=nod;
m1[nod]=x;
return 1;
}
}
return 0;
}
int main()
{
int n, m, e;
fin>>n>>m>>e;
int i, x ,y;
for(i=1;i<=e;i++)
{
fin>>x>>y;
lv[x].push_back(y);
}
int ok=1;
while(ok)
{
ok=0;
for(i = 1; i <= n; i++)
if(!m1[i] && cuplaj(i))ok = 1;
memset(v,0,sizeof(v));
}
int nrc=0;
for(i=1;i<=n;i++)
if(m1[i]) nrc++;
fout<<nrc<<"\n";
for(i=1;i<=n;i++)
if(m1[i])fout<<i<<" "<<m1[i]<<"\n";
return 0;
}