Pagini recente » Cod sursa (job #2549065) | Cod sursa (job #1071801) | Cod sursa (job #2690547) | Cod sursa (job #548237) | Cod sursa (job #397823)
Cod sursa(job #397823)
#include<stdio.h>
#include<vector>
#define Nmx 262
using namespace std;
int pre[Nmx],r[Nmx],viz[Nmx];
struct nood
{
int inf;
nood *urm;
}*G[Nmx];
vector <int> D[Nmx];
int n,m,sol;
void add(int x,int y)
{
nood *aux=new nood;
aux->inf=y;
aux->urm=G[x];
G[x]=aux;
}
void citire()
{
int i,x,y;
scanf("%d%d",&n,&m);
for (i=1;i<=m;++i)
{
scanf("%d%d",&x,&y);
add(x,y);
}
}
int pair_u(int nod)
{
int i;
if (viz[nod])
return 0;
viz[nod]=1;
for (nood *p=G[nod];p;p=p->urm)
if (!r[p->inf])
{
r[p->inf]=nod;
pre[nod]=p->inf;
return 1;
}
for (nood *p=G[nod];p;p=p->urm)
if (pair_u(r[p->inf]))
{
pre[nod]=p->inf;
r[p->inf]=nod;
return 1;
}
return 0;
}
void solve ()
{
int i,j,ok;
do
{
ok=0;
for (i=1; i<=n; ++i)
if (!pre[i]&&pair_u(i))
ok=1;
memset(viz,0,sizeof(viz));
}
while (ok);
for (i=1; i<=n; ++i)
if (!r[i])
{
++sol;
for (j=i;j;j=pre[j])
D[sol].push_back(j);
}
printf("%d\n",sol-1);
for (i=1; i<sol; ++i)
printf ("%d %d\n",D[i].back (),D[i+1].front ());
for (i=1;i<=sol;++i)
for (j=0;j<D[i].size();++j)
printf ("%d ",D[i][j]);
}
int main()
{
freopen("strazi.in","r",stdin);
freopen("strazi.out","w",stdout);
citire();
solve();
return 0;
}