Pagini recente » Cod sursa (job #473095) | Cod sursa (job #2724135) | Cod sursa (job #3166597) | Cod sursa (job #3206141) | Cod sursa (job #1231907)
#include<fstream>
#include<vector>
#include<iostream>
using namespace std;
ifstream in("cuplaj.in");
ofstream out("cuplaj.out");
vector<int> v[10009];
int n,m,e;
int viz[10009],l[10009],r[10009];
void init()
{
for(int i = 1 ; i < 10001 ; i++)
viz[i] = 0;
}
bool cupleaza(int start)
{
if(viz[start])
return false;
viz[start] = 1;
int i;
if(v[start].size() == 0)
return false;
for(i = 0; i <= v[start].size()-1 ; i++){
if(!r[v[start][i]]){
l[start] = v[start][i];
r[v[start][i]] = start;
return true;
}
}
for(i = 0 ; i <= v[start].size()-1 ; i++){
if(cupleaza(r[v[start][i]])){
l[start] = v[start][i];
r[v[start][i]] = start;
return true;
}
}
return false;
}
int main()
{
in>>n>>m>>e;
int i,x,y;
for(i= 1 ; i <= e ; i++){
in>>x>>y;
v[x].push_back(y);
}
bool ok = true;
while(ok){
ok = false;
init();
for(i = 1 ; i <= n ; i++)
if(!l[i])
ok = ok|cupleaza(i);
}
int contor = 0;
for(i = 1 ; i <= n ; i++)
if(l[i])
contor++;
out<<contor<<"\n";
for(i = 1 ; i <= n ; i++)
if(l[i]){
out<<i<<" "<<l[i]<<"\n";
}
return 0;
}