Pagini recente » Cod sursa (job #3123498) | Cod sursa (job #2771131) | Cod sursa (job #2467044) | Cod sursa (job #1762819) | Cod sursa (job #2641666)
#include <bits/stdc++.h>
using namespace std;
ifstream f("ctc.in");
ofstream g("ctc.out");
int n,m,a,b,cnt;
bitset<100010> ok;
int x[100010],y[100010];
vector<int> v[100010];
vector<vector<int> > C;
stack<int> St;
void dfs(int poz){
x[poz]=y[poz]=++cnt;
St.push(poz);ok[poz]=1;
for(auto it:v[poz])
if(!x[it]){
dfs(it);
y[poz]=min(y[poz],y[it]);
}else
if(ok[it])
y[poz]=min(y[poz],x[it]);
if(x[poz]!=y[poz])return;
vector<int> c;
while(1){
int aux=St.top();St.pop();ok[aux]=0;
c.push_back(aux);
if(aux==poz)break;
}
C.push_back(c);
}
int main(){
f>>n>>m;
for(int i=1;i<=m;i++){
f>>a>>b;
v[a].push_back(b);
}
for(int i=1;i<=n;i++)
if(!x[i]){
dfs(i);
}
g<<C.size()<<'\n';
for(auto it:C){
for(auto that:it)
g<<that<<' ';
g<<'\n';
}
}