Pagini recente » Cod sursa (job #1863020) | Cod sursa (job #2678503) | Cod sursa (job #2650114) | Cod sursa (job #2699271) | Cod sursa (job #933208)
Cod sursa(job #933208)
#include<fstream>
#include<vector>
#include<string.h>
using namespace std;
#define max_n 10010
ifstream f("cuplaj.in");
ofstream g("cuplaj.out");
vector<int> L[max_n];
int n , m , e , x , y , nr , ok = 1;
int Viz[max_n] , st[max_n] , dr[max_n];
void read(){
f>>n>>m>>e;
for(int i = 1 ; i <= e ; i++){
f>>x>>y;
L[x].push_back(y);
}
}
bool dfs(int nod){
if(Viz[nod])
return 0;
Viz[nod] = 1;
for(int j = 0 ; j < L[nod].size() ; j++){
if(!dr[L[nod][j]]){
st[nod] = L[nod][j];
dr[L[nod][j]] = nod;
return 1;
}
}
for(int j = 0 ; j < L[nod].size() ; j++){
if( dfs( dr[L[nod][j]] ) ){
st[nod] = L[nod][j];
dr[L[nod][j]] = nod;
return 1;
}
}
return 0;
}
void print(){
for(int i = 1 ; i <= n ; i++){
if(st[i])
nr++;
}
g<<nr<<"\n";
for(int i = 1 ; i <= n ; i++){
if(st[i])
g<<i<<" "<<st[i]<<"\n";
}
}
int main(){
int i;
read();
while(ok){
ok = 0; memset(Viz , 0 , sizeof(Viz));
for(i = 1 ; i <= n ; i++) if(!st[i]) if(dfs(i)) ok = 1;
}
print();
return 0;
}