Pagini recente » Cod sursa (job #1593483) | Cod sursa (job #608046) | Cod sursa (job #1004152) | Cod sursa (job #1445464) | Cod sursa (job #2866420)
#include <fstream>
#include <cstring>
#include <vector>
using namespace std;
ifstream f("cuplaj.in");
ofstream g("cuplaj.out");
vector <int> v[10011];
bool fost[10011];
int st[10011],dr[10011],nr;
bool hopcroft(int k)
{
if(fost[k]==1)
return 0;
fost[k]=1;
for(int i=0;i<v[k].size();i++)
if(dr[v[k][i]]==0)
{
st[k]=v[k][i];
dr[v[k][i]]=k;
return 1;
}
for(int i=0;i<v[k].size();i++)
if(hopcroft(v[k][i])==1)
{
st[k]=v[k][i];
dr[v[k][i]]=k;
return 1;
}
}
int n,m,p,x,y,i,schimb;
int main()
{
f>>n>>m>>p;
for(i=1;i<=p;i++)
{
f>>x>>y;
v[x].push_back(y);
}
schimb=1;
while(schimb)
{
schimb=0;
memset(fost,0,sizeof(fost));
for(i=1;i<=n;i++)
if(st[i]==0)
schimb=schimb|hopcroft(i);
}
for(i=1;i<=n;i++)
if(st[i]!=0)
nr++;
g<<nr<<'\n';
for(i=1;i<=n;i++)
if(st[i]!=0)
g<<i<<" "<<st[i]<<'\n';
return 0;
}