Pagini recente » Cod sursa (job #946366) | Cod sursa (job #2047896) | Cod sursa (job #707575) | Cod sursa (job #2763460) | Cod sursa (job #2335441)
#include<bits/stdc++.h>
#define NMAX 100001
using namespace std;
ifstream f("ctc.in");
ofstream g("ctc.out");
vector<int>G[NMAX],GT[NMAX];
set<int>Ras[NMAX];
bool used[NMAX];
int care[NMAX];
vector<int>Ordine;
int cate=1;
int n,m;
void DFS(int node)
{
used[node]=true;
for(auto i:G[node])
if(used[i]==false)
{
DFS(i);
}
Ordine.push_back(node);
}
void DFST(int node,int unde)
{
care[node]=unde;
Ras[unde].insert(node);
for(auto i:GT[node])
{
if(care[i]==0)
DFST(i,unde);
}
}
int main()
{
f>>n>>m;
for(int i=1;i<=m;++i)
{
int x,y;
f>>x>>y;
G[x].push_back(y);
GT[y].push_back(x);
}
for(int i=1;i<=n;++i)
{
if(used[i]==false)
{
DFS(i);
}
}
for(int i=n-1;i>=1;--i)
{
if(care[Ordine[i]]==0)
{
DFST(Ordine[i],cate);
cate++;
}
}
g<<cate-1<<'\n';
for(int i=1;i<cate;++i)
{
for(auto j:Ras[i])
g<<j<<' ';
g<<'\n';
}
}