Pagini recente » Cod sursa (job #853681) | Cod sursa (job #2393181) | Cod sursa (job #1507144) | Cod sursa (job #6873) | Cod sursa (job #1405403)
#include <bits/stdc++.h>
#define N 100005
#define pb push_back
using namespace std;
vector<int>v[N], g[N], s[N];
int n, m, x, y, cnt, tsort[N], i;
bitset<N>viz;
void df(int nod)
{
if(viz[nod])
return;
viz[nod] = 1;
for(auto it : v[nod])
df(it);
tsort[++cnt] = nod;
}
void dft(int nod)
{
if(viz[nod])
return;
viz[nod] = 1;
s[cnt].pb(nod);
for(auto it : g[nod])
dft(it);
}
int main()
{
freopen("ctc.in", "r", stdin);
freopen("ctc.out", "w", stdout);
scanf("%d%d", &n, &m);
for(; m; m--)
{
scanf("%d%d", &x, &y);
v[x].pb(y);
g[y].pb(x);
}
for(i = 1; i <= n; i++)
if(!viz[i])
df(i);
viz = cnt = 0;
for(; n; n--)
if(!viz[tsort[n]])
{
cnt++;
dft(tsort[n]);
}
printf("%d\n", cnt);
for(i = 1; i <= cnt; i++)
{
for(auto it : s[i])
printf("%d ", it);
printf("\n");
}
return 0;
}