Pagini recente » Cod sursa (job #2701745) | Cod sursa (job #2920176) | Cod sursa (job #2922545) | Cod sursa (job #2693242) | Cod sursa (job #1962192)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("ctc.in");
ofstream g("ctc.out");
short n,m,a[5000][5000],viz1[5000],viz2[5000];
void citire()
{
f>>n>>m;
for(short i=1;i<=m;i++)
{
short x,y;
f>>x>>y;
a[x][y]=1;
}
}
void dfs1(int x,int cont)
{
viz1[x]=cont;
for(int i=1;i<=n;i++)
if(i!=x&&viz1[i]==0)
if(a[x][i]==1) dfs1(i,cont);
}
void dfs2 (int x, int cont)
{
viz2[x]=cont;
for(short i=1;i<=n;i++)
if(i!=x && viz2[i]==0)
if(a[i][x]==1)
dfs2(i,cont);
}
void ctc()
{
int cont=1;
for(short i=1;i<=n;i++)
if(viz1[i]==0)
{
dfs1(i,cont);
dfs2(i,cont);
for(short j=1;j<=n;j++)
if(viz1[j]!=viz2[j]) viz1[j]=viz2[j]=0;
cont++;
}
g<<cont-1<<endl;
for(short i=1;i<=cont;i++,g<<endl)
{
int nr=0;
for(short j=1;j<=n;j++)
if(viz1[j]==i)
{
g<<j<<" ";nr++;
}
}
}
int main()
{
citire();
ctc();
return 0;
}