Pagini recente » Cod sursa (job #54927) | Cod sursa (job #2496438) | Cod sursa (job #484463) | Cod sursa (job #2090860) | Cod sursa (job #2418741)
#include <bits/stdc++.h>
using namespace std;
ifstream f("ctc.in");
ofstream g("ctc.out");
vector<vector<int>> G, rG, res;
vector<int> viz, v;
queue<int> q, c;
int n;
void rd()
{
int x, y;
f>>n>>x;
G.resize(n+1);
rG.resize(n+1);
viz.resize(n+1);
while(f>>x>>y)
{
G[x].push_back(y);
rG[y].push_back(x);
}
}
void DFS(int x)
{
viz[x]=1;
for(auto a:G[x])
if(!viz[a])DFS(a);
q.push(x);
}
void CTC()
{
int x;
for(int i=1; i<=n; i++)
if(!viz[i])DFS(i);
for(int i=1; i<=n; i++)
viz[i]=0;
while(1)
{
while(viz[q.front()]==1)q.pop();
if(!q.size())break;
c.push(q.front());
v.clear();
viz[q.front()]=1;
v.push_back(q.front());
while(c.size())
{
x=c.front();
c.pop();
for(auto a:rG[x])
if(!viz[a])
{
viz[a]=1;
v.push_back(a);
c.push(a);
}
}
res.push_back(v);
}
}
void afis()
{
g<<res.size()<<'\n';
for(auto a:res)
{
sort(a.begin(), a.end());
for(auto b:a)
g<<b<<' ';
g<<'\n';
}
}
int main()
{
rd();
CTC();
afis();
f.close();
g.close();
return 0;
}