Pagini recente » Cod sursa (job #2446917) | Cod sursa (job #1993603) | Cod sursa (job #643519) | Cod sursa (job #86120) | Cod sursa (job #1114460)
#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(int nod)
{
suc[nod] = nrc;
for(int i = 1; i <= n; i++)
if(A[nod][i]==1 && suc[i]==0)
df1(i);
}
void df2(int nod)
{
pred[nod] = nrc;
for(int i = 1; i <= n; i++)
if(A[i][nod] == 1 && pred[i] == 0)
df2(i);
}
int main()
{
citire();
for(int i = 1; i <= n; i++)
{
if(suc[i] == 0)
{
suc[i]=nrc;
df1(i); df2(i);
for(int j = 1; j<=n; j++)
if(suc[j]!=pred[j])
suc[j]=pred[j]=0;
nrc++;
}
}
g<<nrc-1<<endl;
for(int i = 1; i<nrc; i++)
{
for(int j = 1; j<=n; j++)
if(suc[j]==i)
g<<j<<' ';
g<<endl;
}
g.close();
return 0;
}