Pagini recente » Cod sursa (job #1616477) | Cod sursa (job #3205591) | Cod sursa (job #1821652) | Cod sursa (job #141890) | Cod sursa (job #2053917)
#include<fstream>
#include<vector>
#include<bitset>
#define N 255
using namespace std;
vector<int> vecin[N+1];
bitset<N+1> viz;
int _left[N+1];
int _right[N+1];
ifstream cin("strazi.in");
ofstream cout("strazi.out");
bool pairUp(int nod){
if (viz[nod]==true) return false;
viz.set(nod);
for(int i=0;i<vecin[nod].size();i++){
int now=vecin[nod][i];
if (_left[now]==0 ||pairUp(_left[now])){
_left[now]=nod;
_right[nod]=now;
return true;
}
}
return false;
}
int main(){
int n,m,i;
cin>>n>>m;
for(i=1;i<=m;i++){
int x,y;
cin>>x>>y;
vecin[x].push_back(y);
}
bool fl=true;
int cnt=0;
while(fl){
fl=false;
viz.reset();
for(i=1;i<=n;i++)
if (_right[i]==0 &&pairUp(i)){
fl=true;
cnt++;
}
}
cout<<n-cnt-1<<endl;
int start=0;
for(i=1;i<=n;i++)
if (_left[i]==0){
if (start!=0){
int nod=i;
while(_right[nod]!=0) nod=_right[nod];
_right[nod]=start;
_left[start]=nod;
cout<<nod<<' '<<start<<endl;
}
start=i;
}
while(start!=0){
cout<<start<<' ';
start=_right[start];
}
return 0;
}