Pagini recente » Cod sursa (job #773491) | Profil FraNNNkie | Cod sursa (job #2031943) | Cod sursa (job #1245665) | Cod sursa (job #933175)
Cod sursa(job #933175)
#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 , i , 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]] == 0){
dr[L[nod][j]] = nod;
st[nod] = L[nod][j];
nr++;
return 1;
}
}
for(int j = 0 ; j < L[nod].size() ; j++){
if( dfs( dr[L[nod][j]] ) ){
dr[L[nod][j]] = nod;
st[nod] = L[nod][j];
return 1;
}
}
return 0;
}
void print(){
g<<nr<<"\n";
for(int i = 1 ; i <= n ; i++){
if(st[i])
g<<i<<" "<<st[i]<<"\n";
}
}
int main(){
read();
while(ok){
ok = 0; memset(Viz , 0 , sizeof(Viz));
for(i = 1 ; i <= n ; i++) if(st[i] == 0) ok = dfs(i);
}
print();
return 0;
}