Pagini recente » Cod sursa (job #1844965) | Cod sursa (job #2298143) | Cod sursa (job #2187761) | Cod sursa (job #1149109) | Cod sursa (job #2153266)
#include<bits/stdc++.h>
using namespace std;
ifstream fin("ctc.in");
ofstream fout("ctc.out");
vector <int> L[100001];
vector <int> T[100001];
vector <int> ctc[100001];
int nrc, n, m, viz[100001];
int st[100001], sol[100001], top;
void DFS1(int k)
{
viz[k]=1;
for(auto i : L[k])
if(viz[i]==0) DFS1(i);
st[++top]=k;
}
void DFS2(int k)
{
viz[k]=1;
for(auto i : T[k])
if(viz[i]==0) DFS2(i);
ctc[nrc].push_back(k);
}
void CTC()
{
int i,j;
for (i=1;i<=n;i++)
if (viz[i] == 0) DFS1(i);
for (i=1;i<=n;i++)
viz[i] = 0;
while (top > 0)
{
i = st[top];
top--;
if (viz[i] == 0)
{
nrc++;
DFS2(i);
}
}
for (i = 1; i <= nrc; i++)
sort(ctc[i].begin(), ctc[i].end());
for(i=1;i<=n;i++)
for(j=0;j<ctc[i].size();j++)
sol[ctc[i][j]]=i;
}
int main()
{
int i,x,y,j;
fin>>n>>m;
for(i=1;i<=m;i++)
{
fin>>x>>y;
L[x].push_back(y);
T[y].push_back(x);
}
CTC();
fout<<nrc<<"\n";
for(j=1;j<=nrc;j++)
{
for(auto z : ctc[j])
fout<<z<<" ";
fout<<"\n";
}
return 0;
}