Pagini recente » Clasament marius | Cod sursa (job #2220988) | Cod sursa (job #1725604) | Cod sursa (job #920619) | Cod sursa (job #1443195)
#include<fstream>
#include<vector>
using namespace std;
ifstream f("ctc.in");
ofstream g("ctc.out");
vector <int> a[100001], t[100001], sol[100001];
int n, m, c[100001], x, y, i, nr, viz[100001], p;
void dfs(int k)
{
int i;
viz[k]=1;
for(i=0;i<a[k].size();i++)
{
if(viz[a[k][i]]==0) dfs(a[k][i]);
}
c[++p]=k;
}
void dfst(int k)
{
viz[k]=0;
sol[nr].push_back(k);
for(int i=0;i<t[k].size();i++)
{
if(viz[t[k][i]]==1) dfst(t[k][i]);
}
}
int main()
{
f>>n>>m;
for(i=1; i<=m; i++)
{
f>>x>>y;
a[x].push_back(y);
t[y].push_back(x);
}
for(i=1; i<=n; i++)
{
if(viz[i]==0) dfs(i);
}
nr=0;
for(i=n;i>=1;i--)
{
if(viz[c[i]]==1)
{
nr++;
dfst(c[i]);
}
}
g<<nr<<"\n";
for(i=1;i<=nr;i++)
{
for(int j=0;j<sol[i].size();j++)
g<<sol[i][j]<<" ";
g<<"\n";
}
return 0;
}