Pagini recente » Cod sursa (job #1760370) | Cod sursa (job #2104745) | Cod sursa (job #1111843) | Cod sursa (job #1948746) | Cod sursa (job #1369952)
#include <fstream>
#include <vector>
#include <algorithm>
#define pb push_back
using namespace std;
ifstream in("cuplaj.in");
ofstream out("cuplaj.out");
vector< vector<int> > a;
vector<int> gr1,gr2;
vector<bool> v;
int n,m,k;
//........................
int pairup(int x)
{
if(v[x])return 0;
v[x]=true;
for(vector<int>::iterator i=a[x].begin();i!=a[x].end();i++)
if(gr2[*i]==0)
{
gr1[x]=*i;
gr2[*i]=x;
return 1;
}
for(vector<int>::iterator i=a[x].begin();i!=a[x].end();i++)
if(pairup(gr2[*i])==1)
{
gr1[x]=*i;
gr2[*i]=x;
return 1;
}
return 0;
}
int main()
{
in>>n>>m>>k;
a=vector< vector<int> >(n+1);
gr1=vector<int>(n+1);
gr2=vector<int>(m+1);
for(;k;k--)
{
int x,y;
in>>x>>y;
a[x].pb(y);
}
//...................
for(int step=1;step;)
{
step=0;
v=vector<bool>(n+1);
for(int i=1;i<=n;i++)
if(gr1[i]==0)
step+=pairup(i);
}
//....................
int cnt=0;
for(int i=1;i<=n;i++)
if(gr1[i])
cnt++;
out<<cnt<<'\n';
for(int i=1;i<=n;i++)
if(gr1[i])
out<<i<<' '<<gr1[i]<<'\n';
return 0;
}