Pagini recente » Cod sursa (job #693123) | Cod sursa (job #2100492) | Cod sursa (job #1160716) | Cod sursa (job #507220) | Cod sursa (job #1591990)
#include <fstream>
#define NMAX 5009
using namespace std;
ifstream fin("ctc.in");
ofstream fout("ctc.out");
void DFS(int x);
void DFSt(int x);
void DFSt2(int x);
int n, m, i, j;
int unu[NMAX], doi[NMAX], elem, elem2, ctc, M[NMAX][NMAX], x, y;
bool v[NMAX];
int main()
{
fin >> n >> m;
for(i = 1; i <= m; ++i)
{
fin >> x >> y;
M[x][y] = 1;
}
for(i = 1; i <= n; ++i)
{
if(v[i] == false)
{
v[i] = true;
DFS(i);
//elem = 0;
}
}
for(i = elem; i >= 1; --i)
{
if(v[unu[i]] == true)
{
v[unu[i]] = false;
ctc++;
DFSt(unu[i]);
}
}
fout << ctc << '\n';
for(i = elem; i >= 1; --i)
{
if(v[unu[i]] == false)
{
v[unu[i]] = true;
DFSt2(unu[i]);
for(j = elem2; j >= 1; --j)
fout << doi[j] << ' ';
fout << '\n';
elem2 = 0;
}
}
return 0;
}
void DFS(int x)
{
int i;
for(i = 1; i <= n; ++i)
{
if(M[x][i] == 1 && v[i] == false)
{
v[i] = true;
DFS(i);
}
}
++elem;
unu[elem] = x;
}
void DFSt(int x)
{
int i;
for(i = 1; i <= n; ++i)
{
if(M[i][x] == 1 && v[i] == true)
{
v[i] = false;
DFSt(i);
}
}
}
void DFSt2(int x)
{
int i;
for(i = 1; i <= n; ++i)
{
if(M[i][x] == 1 && v[i] == false)
{
v[i] = true;
DFSt2(i);
}
}
++elem2;
doi[elem2] = x;
}