Pagini recente » Cod sursa (job #1549829) | Cod sursa (job #1662667) | Cod sursa (job #1639865) | Cod sursa (job #2612305) | Cod sursa (job #956689)
Cod sursa(job #956689)
#include<fstream>
#include<vector>
#include<cstring>
using namespace std ;
ifstream fin("cuplaj.in");
ofstream fout("cuplaj.out");
#define maxn 10001
int N, M, E ;
vector<int> vecini[maxn] ;
int cine[maxn] ;
bool sel[maxn], sel2[maxn] ;
int cuplaj[maxn] ;
int nr ;
void citire()
{
fin >> N >> M >> E ;
for(int i = 1; i <= E; ++i )
{
int a, b ;
fin >> a >> b ;
vecini[ a + M ].push_back( b ) ;
}
}
bool dfs(int nod)
{
if(sel2[nod-M])
return 0;
sel2[nod-M] = true;
for(size_t i = 0; i < vecini[nod].size(); ++i )
{
int nod_act = vecini[nod][i] ;
if( sel[nod_act] == false )
{
cuplaj[ nod - M ] = nod_act ;
cine[nod_act] = nod ;
sel[nod_act] = true ;
return 1 ;
}
int vechi = cine[nod_act] ;
if ( !dfs( cine[nod_act] ) ) continue;
cuplaj[ nod - M ] = nod_act ;
cine[nod_act] = nod ;
return 1 ;
}
return 0 ;
}
int main()
{
citire() ;
for(int i = 1; i <= N; ++i )
{
memset(sel2, false, sizeof(sel2));
nr += dfs( i + M ) ;
}
fout << nr << "\n" ;
for(int i = 1; i <= N; ++i )
if( cuplaj[i] )
fout << i << " " << cuplaj[i] << "\n" ;
return 0 ;
}