Pagini recente » Cod sursa (job #423019) | Cod sursa (job #1918152) | Cod sursa (job #1299166) | Cod sursa (job #843353) | Cod sursa (job #2788455)
#include <bits/stdc++.h>
using namespace std;
int n;
ifstream fin("ctc.in");
ofstream fout("ctc.out");
vector<int>viz;
vector<vector<int>>g,gt;
stack<int>s;
void citire()
{
int i1,i2,m;
fin>>n>>m;
g=gt=vector<vector<int>>(n+1);
viz=vector<int>(n+1);
for(int i=1; i<=m; i++)
{
fin>>i1>>i2;
g[i1].push_back(i2);
gt[i2].push_back(i1);
}
}
void dfs(int np)
{
viz[np]=1;
for(auto e:g[np])
if(!viz[e])
dfs(e);
s.push(np);
}
void dfst(int np,int cnt)
{
viz[np]=cnt;
for(auto e:gt[np])
if(!viz[e])
dfst(e,cnt);
}
int main()
{
citire();
for(int i=1; i<=n; i++)
if(!viz[i])
dfs(i);
for(int i=1; i<=n; i++)
viz[i]=0;
int vf,nrct=0;
while(!s.empty())
{
vf=s.top();
if(!viz[vf])
{
nrct++;
dfst(vf,nrct);
}
s.pop();
}
fout<<nrct<<'\n';
for(int aux=1; aux<=nrct; aux++,cout<<'\n')
for(int i=1; i<=n; i++)
if(viz[i]==aux)
fout<<i<<' ';
}