Pagini recente » Cod sursa (job #2858479) | Cod sursa (job #1507748) | Cod sursa (job #2878706) | Cod sursa (job #1192796) | Cod sursa (job #2608603)
#include <fstream>
#include <vector>
using namespace std;
ifstream cin("cuplaj.in");
ofstream cout("cuplaj.out");
int N,M, viz[101000],L[10100], R[10100];
vector <int> l[10100];
inline void scan() {
int u,v,E;
cin>>N>>M>>E;
for(int i=1; i<=E; ++i)
{
cin>>u>>v;
l[u].push_back(v);
l[v].push_back(u);
}
}
inline bool cup(int x)
{
viz[x]=1;
for(int i=0; i<l[x].size(); ++i)
if(!R[l[x][i]]) {
L[x]=l[x][i];
R[l[x][i]]=x;
return 1;
}
for(int i=0; i<l[x].size(); ++i)
if(!viz[R[l[x][i]]] && cup(R[l[x][i]])) {
L[x]=l[x][i];
R[l[x][i]]=x;
return 1;
}
return 0;
}
int main()
{
bool ok;
scan();
do{
ok=0;
for(int i=1; i<=N; ++i)
if(!viz[i] && !R[i]){
ok=max(ok,cup(i));
}
for(int i=1; i<=N; ++i)
viz[i]=0;
}while(ok);
int lg=0;
for(int i=1; i<=N; lg+=(L[i++]!=0));
cout<<lg<<'\n';
for(int i=1; i<=N; ++i)
if(L[i])
cout<<i<<' '<<L[i]<<'\n';
return 0;
}