Pagini recente » Cod sursa (job #2861064) | Cod sursa (job #2847765) | Cod sursa (job #1466832) | Cod sursa (job #2483717) | Cod sursa (job #1860417)
#include <fstream>
#include <vector>
#include <string.h>
#define nMax 10001
#define pb push_back
using namespace std;
ifstream fin("cuplaj.in");
ofstream fout("cuplaj.out");
int L, R, m, cuplaj;
int viz[nMax], l[nMax], r[nMax];
vector<int> G[nMax];
bool pairup(int node)
{
if(viz[node])
return 0;
viz[node]=1;
for(vector<int>::iterator it=G[node].begin(); it!=G[node].end(); it++)
{
int fiu=*it;
if(r[fiu]==0)
{
cuplaj++;
r[fiu]=node;
l[node]=fiu;
return 1;
}
}
for(vector<int>::iterator it=G[node].begin(); it!=G[node].end(); it++)
{
int fiu=*it;
if(pairup(r[fiu]))
{
r[fiu]=node;
l[node]=fiu;
return 1;
}
}
return 0;
}
int main()
{
int a, b;
fin>>L>>R>>m;
for(int i=1; i<=m; i++)
{
fin>>a>>b;
G[a].pb(b);
}
for(int change=1; change;)
{
change=0;
memset(viz, 0, sizeof(viz));
for(int i=1; i<=L; i++)
if(l[i]==0)
change|=pairup(i);
}
fout<<cuplaj<<'\n';
for(int i=1; i<=L; i++)
if(l[i])
fout<<i<<" "<<l[i]<<'\n';
}