Pagini recente » Cod sursa (job #1071828) | Cod sursa (job #2433082) | Cod sursa (job #2310009) | Cod sursa (job #1344756) | Cod sursa (job #2419167)
#include <bits/stdc++.h>
#define NMAX 10005
using namespace std;
ifstream fin("cuplaj.in");
ofstream fout("cuplaj.out");
int stanga,dreapta,m,nr;
int st[NMAX],dr[NMAX];
bool uz[NMAX];
vector<int>l[NMAX];
bool cup(int nod);
int main()
{int i,x,y;
bool ok=1;
fin>>stanga>>dreapta>>m;
for(i=1;i<=m;i++)
{fin>>x>>y;
l[x].push_back(y);
}
while(ok)
{memset(uz,0,sizeof(uz));
ok=0;
for(i=1;i<=stanga;i++)
if(!st[i] && !uz[i])
if(cup(i))
ok=1;
}
for(i=1;i<=stanga;i++)
if(st[i])
nr++;
fout<<nr<<'\n';
for(i=1;i<=stanga;i++)
if(st[i])
fout<<i<<' '<<st[i]<<'\n';
return 0;
}
bool cup(int nod)
{if(uz[nod])
return 0;
uz[nod]=1;
int i;
for(i=0;i<l[nod].size();i++)
if(!dr[l[nod][i]])
{st[nod]=l[nod][i];dr[l[nod][i]]=nod;return 1;}
for(i=0;i<l[nod].size();i++)
if(cup(dr[l[nod][i]]))
{st[nod]=l[nod][i];dr[l[nod][i]]=nod;return 1;}
return 0;
}