Pagini recente » Cod sursa (job #2129933) | Cod sursa (job #1112355) | Istoria paginii runda/alteproblemegogule | Cod sursa (job #597139) | Cod sursa (job #563649)
Cod sursa(job #563649)
#include <fstream>
#include <vector>
using namespace std;
const char InFile[]="cuplaj.in";
const char OutFile[]="cuplaj.out";
const int MaxN=10111;
ifstream fin(InFile);
ofstream fout(OutFile);
int L,R,E,x,y,l[MaxN],r[MaxN],used[MaxN];
vector<int> LA[MaxN];
inline bool cuplez(int nod)
{
if(used[nod])
{
return false;
}
used[nod]=1;
for(vector<int>::iterator it=LA[nod].begin();it!=LA[nod].end();++it)
{
if(!r[*it])
{
l[nod]=*it;
r[*it]=nod;
return true;
}
}
for(vector<int>::iterator it=LA[nod].begin();it!=LA[nod].end();++it)
{
if(cuplez(r[*it]))
{
l[nod]=*it;
r[*it]=nod;
return true;
}
}
return false;
}
inline int cuplaj()
{
int cuplaj_maxim=0;
bool am_cuplaj=true;
while(am_cuplaj)
{
am_cuplaj=false;
memset(used,0,sizeof(used));
for(register int i=1;i<=L;++i)
{
if(!l[i])
{
if(cuplez(i))
{
++cuplaj_maxim;
am_cuplaj=true;
}
}
}
}
return cuplaj_maxim;
}
int main()
{
fin>>L>>R>>E;
for(register int i=1;i<=E;++i)
{
fin>>x>>y;
LA[x].push_back(y);
}
fin.close();
fout<<cuplaj()<<"\n";
for(register int i=1;i<=L;++i)
{
if(l[i])
{
fout<<i<<" "<<l[i]<<"\n";
}
}
fout.close();
return 0;
}