Pagini recente » Cod sursa (job #2068429) | Cod sursa (job #1523638) | Cod sursa (job #888196) | Cod sursa (job #2305288) | Cod sursa (job #1953818)
#include <fstream>
#include<vector>
using namespace std;
vector<int> u,r,l;
vector< vector<int> > la;
int n,m,e,x,y,nr;
bool ok;
ifstream f("cuplaj.in");
ofstream g("cuplaj.out");
bool pairup(int x)
{
if(u[x]) return 0;
u[x]=1;
for(unsigned int i=0;i<la[x].size();i++)
{
int nod=la[x][i];
if(!r[nod]){r[nod]=x;l[x]=nod;return 1;}
}
for(unsigned int i=0;i<la[x].size();i++)
{
int nod=la[x][i];
if(pairup(r[nod])){r[nod]=x;l[x]=nod;return 1;}
}
return 0;
}
int main()
{
f>>n>>m>>e;u.resize(n+1);l.resize(n+1);r.resize(m+1);la.resize(n+1);
for(int i=1;i<=e;i++)
{
f>>x>>y;
la[x].push_back(y);
}
while(!ok)
{
ok=1;
u.assign(n+1,0);
for(int i=1;i<=n;i++) if(!l[i]) ok|=pairup(i);
}
for(int i=1;i<=n;i++) nr+=(l[i]>0);
g<<nr<<'\n';
for(int i=1;i<=n;i++)
if(l[i]) g<<i<<' '<<l[i]<<'\n';
return 0;
}