Pagini recente » Cod sursa (job #1428970) | Cod sursa (job #2667253) | Cod sursa (job #975897) | Cod sursa (job #412318) | Cod sursa (job #1114461)
#include <fstream>
using namespace std;
ifstream f("ctc.in");
ofstream g("ctc.out");
long long int n, m, A[10000][10000], suc[10000], pred[10000], nrc = 1;
void citire()
{
int a, b;
f>>n>>m;
while(f>>a>>b)
A[a][b] = 1;
f.close();
}
void df1(long long int nod)
{
suc[nod] = nrc;
for(long long int i = 1; i <= n; i++)
if(A[nod][i]==1 && suc[i]==0)
df1(i);
}
void df2(long long int nod)
{
pred[nod] = nrc;
for(long long int i = 1; i <= n; i++)
if(A[i][nod] == 1 && pred[i] == 0)
df2(i);
}
int main()
{
citire();
for(long long int i = 1; i <= n; i++)
{
if(suc[i] == 0)
{
suc[i]=nrc;
df1(i); df2(i);
for(long long int j = 1; j<=n; j++)
if(suc[j]!=pred[j])
suc[j]=pred[j]=0;
nrc++;
}
}
g<<nrc-1<<endl;
for(long long int i = 1; i<nrc; i++)
{
for(long long int j = 1; j<=n; j++)
if(suc[j]==i)
g<<j<<' ';
g<<endl;
}
g.close();
return 0;
}