Pagini recente » Cod sursa (job #60512) | Cod sursa (job #2785739) | Cod sursa (job #2741586) | Cod sursa (job #347057) | Cod sursa (job #1250276)
#include <fstream>
#define DMAX 10000
using namespace std;
ifstream fin ("ctc.in");
ofstream fout ("ctc.out");
void citire();
void construieste_D();
void ctc();
void afisare();
bool D[DMAX][DMAX];
int n, m;
bool use[DMAX];
int nr, sol[DMAX][DMAX];
int main()
{
citire();
construieste_D();
ctc();
afisare();
fin.close();
fout.close();
return 0;
}
void citire()
{
int i, a, b;
fin>> n>> m;
for (i=1; i<=m; i++)
{
fin>> a>> b;
D[a][b]=true;
}
for (i=1; i<=n; i++) D[i][i]=true;
}
void construieste_D()
{
int i, j, k;
for (k=1; k<=n; k++)
for (i=1; i<=n; i++)
for (j=1; j<=n; j++)
if (!D[i][j])
D[i][j]=D[i][k] && D[k][j];
}
void ctc()
{
int i, j;
for (i=1; i<=n; i++)
if (!use[i])
{
nr++;
for (j=1; j<=n; j++)
if (D[i][j] && D[j][i])
{
use[j]=true;
sol[nr][++sol[nr][0]] = j;
}
}
}
void afisare()
{
int i, j;
fout<< nr<< '\n';
for (i=1; i<=nr; i++)
{
for (j=1; j<=sol[i][0]; j++)
fout<< sol[i][j]<< ' ';
fout<< '\n';
}
}