Pagini recente » Cod sursa (job #81405) | Cod sursa (job #599050) | Cod sursa (job #466255) | Cod sursa (job #931797) | Cod sursa (job #654356)
Cod sursa(job #654356)
#include<fstream>
#include<vector>
using namespace std;
int m;
short na,nb,st[10100],dr[10100];
bool viz[10100];
vector <short> G[10100];
void Citire()
{
int i;
short x,y;
ifstream fin("cuplaj.in");
fin>>na>>nb>>m;
for(i=1;i<=m;i++)
{
fin>>x>>y;
G[x].push_back(y);
}
fin.close();
}
inline bool Hopcroft_Karp(short nod)
{
if(viz[nod]==true)
return false;
viz[nod]=true;
vector <short>::iterator it;
for(it=G[nod].begin();it!=G[nod].end();it++)
{
if(!st[*it])
{
st[*it]=nod;
dr[nod]=*it;
return true;
}
}
for(it=G[nod].begin();it!=G[nod].end();it++)
{
if(Hopcroft_Karp(st[*it])==true)
{
st[*it]=nod;
dr[nod]=*it;
return true;
}
}
return false;
}
void Rezolvare()
{
short i;
bool modificare=true;
while(modificare)
{
modificare=false;
for(i=1;i<=na;i++)
{
if(!dr[i])
{
if(Hopcroft_Karp(i)==true)
modificare=true;
}
}
for(i=1;i<=na;i++)
viz[i]=false;
}
}
void Afisare()
{
int i,nrcuplaj=0;
for(i=1;i<=na;i++)
{
if(dr[i])
nrcuplaj++;
}
ofstream fout("cuplaj.out");
fout<<nrcuplaj<<"\n";
for(i=1;i<=na;i++)
{
if(dr[i])
fout<<i<<' '<<dr[i]<<"\n";
}
fout.close();
}
int main()
{
Citire();
Rezolvare();
Afisare();
return 0;
}