Pagini recente » Cod sursa (job #1240043) | Cod sursa (job #978098) | Cod sursa (job #1743445) | Cod sursa (job #478085) | Cod sursa (job #957040)
Cod sursa(job #957040)
#include<fstream>
#include<bitset>
#include<vector>
using namespace std ;
ifstream fin("cuplaj.in");
ofstream fout("cuplaj.out");
#define maxn 10001
int N, M, E ;
bitset<maxn> sel ;
vector<int> graf[maxn] ;
int st[maxn], cuplaj[maxn] ;
void citire()
{
fin >> N >> M >> E ;
for(int i = 0; i < E; ++i )
{
int x, y ;
fin >> x >> y ;
graf[x].push_back(y) ;
}
}
bool dfs(int nod)
{
if( sel[nod] )
return false ;
sel[nod] = true ;
for(size_t i = 0; i < graf[nod].size(); ++i )
{
int vecin = graf[nod][i] ;
int de_unde = st[vecin] ;
if( de_unde == false || dfs( de_unde ) == true )
{
st[vecin] = nod ;
cuplaj[nod] = vecin ;
return true ;
}
}
return false ;
}
int main()
{
citire() ;
int nr = 0 ;
bool ok ;
do
{
ok = false;
for(int i = 1; i <= N; ++i )
{
if( cuplaj[i] == 0 && dfs(i) == true )
{
++nr ;
ok = true ;
}
}
sel.reset() ;
} while( ok == true ) ;
fout << nr << "\n" ;
for(int i = 1; i <= N; ++i )
if( cuplaj[i] )
fout << i << " " << cuplaj[i] << "\n" ;
return 0 ;
}