Pagini recente » Utilizatori inregistrati la Infoarena Monthly 2012 - Runda 9 | Cod sursa (job #972082) | Cod sursa (job #502363) | Cod sursa (job #139358) | Cod sursa (job #1407706)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
int vizitat[22222],pereche[22222];
vector<int> vecini[22222];
bool pairUp(int nod,int culoare)
{
int i,x;
vizitat[nod]=culoare;
for(i=0;i<vecini[nod].size();++i)
{
x=vecini[nod][i];
if(vizitat[x]==culoare)
continue;
vizitat[x]=culoare;
if(pereche[x]==0)
{
pereche[x]=nod;
pereche[nod]=x;
return true;
}
if(pairUp(pereche[x],culoare)==true)
{
pereche[x]=nod;
pereche[nod]=x;
return true;
}
}
return false;
}
int main()
{
int n1,n2,m,i,rez=0,a,b;
ifstream in("cuplaj.in");
ofstream out("cuplaj.out");
in>>n1>>n2>>m;
for(i=1;i<=m;++i)
{
in>>a>>b;
b+=n1;
vecini[a].push_back(b);
vecini[b].push_back(a);
}
for(i=1;i<=n1;++i)
{
if(pereche[i]==0)
{
if(pairUp(i,i))
++rez;
}
}
out<<rez<<"\n";
for(i=1;i<=n1;++i)
{
if(pereche[i]!=0)
{
out<<i<<" "<<pereche[i]-n1<<"\n";
}
}
return 0;
}