Pagini recente » Cod sursa (job #3039431) | Cod sursa (job #2339828) | Cod sursa (job #2272177) | Cod sursa (job #62299) | Cod sursa (job #2695678)
#include <iostream>
#include <vector>
#include <fstream>
using namespace std;
int N, M;
int result;
int L[10005];
int R[10005];
vector<int> edges[10005];
bool viz[100005];
bool ver(int poz){
if(viz[poz])
return 0;
viz[poz] = true;
for( auto it : edges[poz] ){
if( !R[it] )
{
L[poz] = it;
R[it] = poz;
return 1;
}
}
for( auto it : edges[poz] ){
if( ver(R[it]) )
{
L[poz] = it;
R[it] = poz;
return 1;
}
}
return 0;
}
void read(){
ifstream fin("cuplaj.in");
int e, x, y;
fin >> N >> M >> e;
for( ; e; e-- ){
fin >> x >> y;
edges[x].push_back(y);
}
}
int main()
{
read();
bool ok = true;
while( ok ){
ok = 0;
for ( int i = 0; i <= M; i++ ){
viz[i] = 0;
}
for( int i = 1; i <= N; i++ ){
if( !L[i] && ver(i) ){
ok = 1;
result++;
}
}
}
ofstream fout("cuplaj.out");
fout << result << '\n';
for( int i = 1; i <= N; i++ ){
if( L[i] ){
fout << i << ' ' << L[i] << '\n';
}
}
return 0;
}