Pagini recente » Cod sursa (job #2876817) | Cod sursa (job #3004184) | Cod sursa (job #1959226) | Cod sursa (job #493503) | Cod sursa (job #2423123)
#include <fstream>
#include <vector>
using namespace std;
ifstream cin("cuplaj.in");
ofstream cout("cuplaj.out");
int n,m,e,i,a,b;
vector<int>par;
vector<int>lat;
struct adat
{
int par=0;
vector<int>el;
};
vector<adat>x;
bool ok;
bool parosit(int csp)
{
if(lat[csp]) return false;
else lat[csp]=true;
for(auto e : x[csp].el)
{
if(!par[e])
{
par[e]=csp;
x[csp].par=e;
return true;
}
}
for(auto e : x[csp].el)
{
if(parosit(par[e]))
{
par[e]=csp;
x[csp].par=e;
return true;
}
}
return false;
}
vector<pair<int,int> >megold;
int main()
{
cin>>n>>m>>e;
x.resize(n+1);
par.resize(m+1,0);
for(i=1;i<=e;++i)
{
cin>>a>>b;
x[a].el.push_back(b);
}
ok=true;
while(ok)
{
ok=false;
lat.clear();
lat.resize(n+1,0);
for(i=1;i<=n;++i)
if(!lat[i] && !x[i].par)
if(parosit(i)) ok=true;
}
for(i=1;i<=n;++i)
if(x[i].par) megold.push_back({i,x[i].par});
cout<<megold.size()<<"\n";
for(auto e : megold) cout<<e.first<<" "<<e.second<<"\n";
return 0;
}