Pagini recente » Cod sursa (job #2127292) | Cod sursa (job #550812) | Cod sursa (job #2820035) | Cod sursa (job #1828177) | Cod sursa (job #403061)
Cod sursa(job #403061)
#include<stdio.h>
#include<vector>
#include<string.h>
using namespace std;
vector<int> v[ 260 ];
int s[ 260 ],d[ 260 ],n,m,i,j,k,I,sol[260],c,a,b,poz;
bool viz[ 260 ],ok;
bool cuplaj(int nod){
if(viz[nod])return false;
viz[nod] = true;
int N,i;
N = v[nod].size();
for(i = 0; i < N ; i++)
if(!d[v[nod][i]])
{s[nod] = v[nod][i];
d[v[nod][i]] = nod;
return true;
}
for(i = 0;i < N ; i++)
if(cuplaj(d[v[nod][i]]))
{s[nod] = v[nod][i];
d[v[nod][i]] = nod;
return true;
}
return false;
}
int main(){
freopen("strazi.in","r",stdin);
freopen("strazi.out","w",stdout);
scanf("%d %d",&n,&m);
for(i = 1 ; i <= m ; i++)
{scanf("%d %d",&a,&b);
v[a].push_back(b);
}
ok = 1;
while(ok){
ok = 0;
memset(viz,0,sizeof(viz));
for(i = 1 ; i <= n ; i++)
{if(!s[i] && cuplaj(i))
{ok = 1;
c++;
}
}
}
printf("%d \n",n-c-1);
for(i = 1 ; i <= n ; i++)
if(!d[i]){poz = i;d[i] = -1;I = i;break;}
for(;poz;poz = s[poz])
if(!s[poz])
{if(c == n-1)break;
else
for(; i <= n;i++)
if(!d[i])
{s[poz] = i;
printf("%d %d\n",poz,i);
d[i] = poz; c++;
break;
}
}
for(;I;I = s[I])
printf("%d ",I);
return 0;}