Pagini recente » Istoria paginii utilizator/horiaspataru | Cod sursa (job #2711089) | Cod sursa (job #1382556) | Cod sursa (job #151549) | Cod sursa (job #1791269)
#include <bits/stdc++.h>
using namespace std;
int n,m,top,nrc;
int st[100003];
bool viz[100003];
vector<int>L1[100003],L2[100003],sol[100003];
void Citire()
{
int i,x,y;
ifstream fin("ctc.in");
fin>>n>>m;
for(i=1;i<=m;++i)
{
fin>>x>>y;
L1[x].push_back(y);
L2[y].push_back(x);
}
fin.close();
}
void DFS1(int nod)
{
viz[nod]=true;
for(auto i : L1[nod])
if(!viz[i])
DFS1(i);
st[++top]=nod;
}
void DFS2(int nod)
{
viz[nod]=false;
for(auto i : L2[nod])
if(viz[i])
DFS2(i);
sol[nrc].push_back(nod);
}
void Solutie()
{
int i;
for(i=1;i<=n;++i)
if(!viz[i])
DFS1(i);
while(top)
{
i=st[top--];
if(viz[i]==1)
{
nrc++;
DFS2(i);
}
}
}
void Afisare()
{
int i;
unsigned int j;
ofstream fout("ctc.out");
fout<<nrc<<"\n";
for(i=1;i<=nrc;++i)
{
for(j=0;j<sol[i].size();++j)
fout<<sol[i][j]<<" ";
fout<<"\n";
}
}
int main()
{
Citire();
Solutie();
Afisare();
return 0;
}