Pagini recente » Cod sursa (job #2220435) | Cod sursa (job #3256711) | Cod sursa (job #565635) | Cod sursa (job #732745) | Cod sursa (job #278061)
Cod sursa(job #278061)
#include <iostream.h>
#include<fstream.h>
int n,a[1000],b[1000],i,j,nr,m, c[1000];
ifstream f("ctc.in");
ofstream h("ctc.out");
struct nod{
int inf;
nod *dr;
};
nod *l[1000],*r[1000];
void citire()
{nod *d;int y,x,i;
f>>n>>m;
for(i=1;i<=m;i++)
{f>>x>>y;
d=new nod;
d->inf=y;
d->dr=l[x];
l[x]=d;
d=new nod;
d->inf=x;
d->dr=r[y];
r[y]=d;
}
}
void bf1(int x)
{int u=1,p=1;
nod *d;
c[p]=x;
while(p<=u)
{d=l[c[p]];
while(d!=NULL)
{if(a[d->inf]==0) {c[++u]=d->inf;a[d->inf]=nr;}
d=d->dr;
}
p++;
}
}
void bf2(int x)
{int u=1,p=1;
nod *d;
c[p]=x;
while(p<=u)
{d=r[c[p]];
while(d!=NULL)
{if(b[d->inf]==0) {c[++u]=d->inf;b[d->inf]=nr;}
d=d->dr;
}
p++;
}
}
int main()
{citire();
nr=1;
for(i=1;i<=n;i++)
if(a[i]==0)
{a[i]=b[i]=nr;
bf1(i);bf2(i);
for(j=1;j<=n;j++)
if(a[j]!=b[j])
a[j]=b[j]=0;
nr++;
}
h<<nr-1<<'\n';
for(i=1;i<nr;i++)
{for(j=1;j<=n;j++)
if(a[j]==i) h<<j<<" " ;
h<<'\n';
}
return 0;
}