Pagini recente » Cod sursa (job #2539378) | Cod sursa (job #646245) | Cod sursa (job #2459193) | Cod sursa (job #1842447) | Cod sursa (job #1437903)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
const int MAX = 10003;
int N, M, P, sol, k, cuplaj [MAX], viz[MAX] , used[ MAX ];
vector <int> vcn [ MAX ];
bool cuplz ( int nd ) {
if ( viz [nd] == k ) return 0;
viz[nd] = k;
int i;
for ( i = 0 ; i < vcn[nd].size() ; i++ )
if (!cuplaj[vcn[nd][i]]) {
cuplaj[vcn[nd][i]] = nd; used[nd] = 1;
return 1;
}
for ( i = 0 ; i < vcn[nd].size() ; i++ )
if ( cuplaj [vcn[nd][i]] != nd && cuplz ( cuplaj [vcn[nd][i]] ) ){
cuplaj [vcn[nd][i]] = nd;
return 1;
}
return 0;
}
int main() {
ifstream f ( "cuplaj.in" , ios::in ) ;
ofstream g ( "cuplaj.out" , ios::out );
int i , x, y, z = 1;
f >> N >> M >> P;
while ( P-- ) {
f >> x >> y;
vcn[x].push_back ( y );
}
while ( z ) {
z = 0;
k++;
for ( i = 1; i <= N ; i++ )
if ( !used [i] && cuplz ( i ) ) {
z=1;
sol++;
}
}
g<<sol<<"\n";
for ( i = 1; i <= M ; i++)
g<<cuplaj[i]<<" "<<i<<"\n";
return 0;
}