Pagini recente » Cod sursa (job #2357409) | Cod sursa (job #1760041) | Profil sebinechita | Cod sursa (job #970015) | Cod sursa (job #1582382)
#include <cstdio>
#include <cstring>
#define MAXN 255
#define MAXM 7000
int lista[MAXN+1], next[MAXM+1], val[MAXM+1], urm[MAXN+1], fata[MAXN+1], baiat[MAXN+1], ok[MAXN+1];
char viz[MAXN+1];
bool gasim(int x){
if(viz[x]==1){
return 0;
}
viz[x]=1;
int p=lista[x];
while(p){
if(baiat[val[p]]==0){
baiat[val[p]]=x;
fata[x]=val[p];
return 1;
}
p=next[p];
}
p=lista[x];
while(p){
if(gasim(baiat[val[p]])){
baiat[val[p]]=x;
fata[x]=val[p];
return 1;
}
p=next[p];
}
return 0;
}
int main(){
int n, m, i, x, f, ans, s;
FILE *fin, *fout;
fin=fopen("strazi.in", "r");
fout=fopen("strazi.out", "w");
fscanf(fin, "%d%d", &n, &m);
for(i=1; i<=m; i++){
fscanf(fin, "%d%d", &x, &val[i]);
next[i]=lista[x];
lista[x]=i;
}
f=1;
while(f){
f=0;
memset(viz, 0, sizeof viz);
for(i=1; i<=n; i++){
if((!fata[i])&&(gasim(i))){
f=1;
}
}
}
ans=n-1;
for(i=1; i<=n; i++){
if(fata[i]){
ans--;
ok[fata[i]]=1;
}
}
fprintf(fout, "%d\n", ans);
s=0;
for(i=1; i<=n; i++){
if(ok[i]==0){
if(s!=0){
fprintf(fout, "%d %d\n", s, i);
}
urm[s]=i;
x=i;
while(fata[x]){
urm[x]=fata[x];
x=fata[x];
}
s=x;
}
}
s=0;
while(urm[s]){
s=urm[s];
fprintf(fout, "%d ", s);
}
fclose(fin);
fclose(fout);
return 0;
return 0;
}