Pagini recente » Istoria paginii runda/prega_oji2015_x_2 | Cod sursa (job #1910314) | Cod sursa (job #2246372) | Cod sursa (job #1315247) | Cod sursa (job #750415)
Cod sursa(job #750415)
#include<iostream>
#include<fstream>
#include<vector>
using namespace std;
const int Nmax = 10001;
ifstream in("cuplaj.in");
ofstream out("cuplaj.out");
vector<int> v[Nmax];
int n,m,e,nr_muchii,dreapta[Nmax],stanga[Nmax];
bool viz[Nmax];
bool cuplez(int nod)
{
int i,y;
if ( viz[nod] == 1)
return 0;
viz[nod] = 1;
for( i = 0 ; i < v[nod].size() ; i++ )
{
y = v[nod][i];
if (!stanga[y] || cuplez(stanga[y])) //nu are vecin sau are vecin dar il pot cupla cu altul
{
dreapta[nod] = y;
stanga[y] = nod;
return 1;
}
}
return 0;
}
int main()
{
int i,x,y;
bool cupleaza;
in>>n>>m>>e;
for(i = 1 ; i <= e ; i++)
{ in>>x>>y;
v[x].push_back(y);
}
cupleaza = 1;
while( cupleaza == 1 )
{
cupleaza = 0;
for( i = 1 ; i <= n ; i++)
viz[i]=0;
for( i = 1 ; i <=n ; i++)
if (dreapta[i] == 0 && cuplez(i) == 1)
{
cupleaza = 1;
nr_muchii++;
}
}
out<<nr_muchii<<endl;
for( i = 1 ; i <= n ; i++ )
if ( dreapta[i] != 0)
out<<i<<' '<<dreapta[i]<<'\n';
in.close();
out.close();
return 0;
}