Pagini recente » Cod sursa (job #1343269) | Cod sursa (job #252406) | Cod sursa (job #2581149) | Cod sursa (job #2728136) | Cod sursa (job #1206512)
#include <fstream>
#include <vector>
#include <cstring>
using namespace std;
vector<int> lda[10005];
int v1[10005],v2[10005],n,m,e,x,y,trecut[10005],sol;
bool calc(int nod)
{
if (trecut[nod]==1) return 0;
trecut[nod]=1;
for (int i=0;i<lda[nod].size();++i)
{
if (v2[lda[nod][i]]==0)
{
v1[nod]=lda[nod][i];
v2[lda[nod][i]]=nod;
return 1;
}
}
for (int i=0;i<lda[nod].size();++i)
{
if (calc(v2[lda[nod][i]]))
{
v1[nod]=lda[nod][i];
v2[lda[nod][i]]=nod;
return 1;
}
}
return 0;
}
int main()
{
ifstream in ("cuplaj.in");
ofstream out ("cuplaj.out");
in>>n>>m>>e;
for (int i=1;i<=e;++i)
{
in>>x>>y;
lda[x].push_back(y);
}
bool advr=1;
while (advr)
{
advr=0; memset(trecut,0,sizeof(trecut));
for (int i=1;i<=n;++i)
if (v1[i]==0)
{
advr=advr | calc(i);
}
}
for (int i=1;i<=n;++i) if (v1[i]!=0) ++sol;
out<<sol<<"\n";
for (int i=1;i<=n;++i) if (v1[i]!=0) out<<i<<" "<<v1[i]<<"\n";
in.close();
out.close();
return 0;
}