Pagini recente » Cod sursa (job #1535062) | Cod sursa (job #2514683) | Cod sursa (job #2521611) | Cod sursa (job #2664810)
#include <bits/stdc++.h>
using namespace std;
ifstream fin ("ctc.in");
ofstream fout("ctc.out");
typedef vector<int> vi;
typedef vector<bool> vb;
int n,m,k;
vector<vector<int>> g;
vector<vector<int>> gr;
vi ctc;
int nrctc=0;
void pm(int start){
if(ctc[start]) return;
vb plus(n+1,0), minus(n+1,0);
// vb tc(n+1,0);
auto dfs=[](int x, vb& viz, vector<vi> &g, auto &dfs1)->void{
viz[x]=1;
for(auto nx:g[x]){
if(viz[nx]==0)
dfs1(nx, viz, g, dfs1);
}
};
dfs(start, plus, g, dfs);
dfs(start, minus, gr, dfs);
cout<<nrctc<<" ";
++nrctc;
for(int i=1;i<=n;++i)
if(plus[i] and minus[i] and ctc[i]==0){
ctc[i]=nrctc;
}
// for(int i)
}
int main(){
fin>>n>>m;
g.resize(n+1);
gr.resize(n+1);
ctc.resize(n+1,0);
for(int i=m;i--;){
int x,y;
fin>>x>>y;
g[x].push_back(y);
gr[y].push_back(x);
}
//
for(int i=1;i<=n;++i)
pm(i);
vector<vi> ans(nrctc+1);
for(int i=1;i<=n;++i)
ans[ctc[i]].push_back(i);
fout<<nrctc<<"\n";
for(int i=1;i<=nrctc;++i){
for(auto x:ans[i])
fout<<x<<" ";
fout<<"\n";
}
}