Pagini recente » Cod sursa (job #649314) | Cod sursa (job #1497053) | Cod sursa (job #1497050) | Cod sursa (job #3306928) | Cod sursa (job #3306953)
#include <bits/stdc++.h>
using namespace std;
ifstream in("ctc.in");
ofstream out("ctc.out");
void dfs(int nod, const vector<vector<int>>& v, vector<bool>& viz, vector<int>& sor)
{
viz[nod]=true;
for(auto it : v[nod])
if(!viz[it])
dfs(it,v,viz,sor);
sor.push_back(nod);
}
int main()
{
int n,m,a,b;
in>>n>>m;
vector<vector<int>> v(n+5);
vector<vector<int>> inv(n+5);
vector<vector<int>> ctc;
vector<int> sor;
vector<bool> viz(n+5);
for(int i=1;i<=m;i++)
{
in>>a>>b;
v[a].push_back(b);
inv[b].push_back(a);
}
for(int i=1;i<=n;i++)
if(!viz[i])
dfs(i,v,viz,sor);
reverse(sor.begin(),sor.end());
viz=vector<bool>(n+5);
for(auto i:sor)
if(!viz[i])
{
ctc.push_back(vector<int>());
dfs(i,inv,viz,ctc.back());
}
out<<ctc.size()<<"\n";
for(auto it1:ctc)
{
for(auto it2:it1)
out<<it2<<" ";
out<<"\n";
}
return 0;
}