Pagini recente » Cod sursa (job #739659) | Cod sursa (job #2168443) | Cod sursa (job #213628) | Cod sursa (job #2055645) | Cod sursa (job #1951349)
#include<bits/stdc++.h>
using namespace std;
const int N=100020;
vector <int> lda[N], ldt[N], l, lc[N];
int v1[N], v2[N], nc;
void dfs1(int nod){
v1[nod]=1;
int x=lda[nod].size();
for(int i=0;i<x;i++) if(!v1[lda[nod][i]]){
dfs1(lda[nod][i]);
}
l.push_back(nod);
}
void dfs(int nod){
int x=ldt[nod].size();
v2[nod]=1;
for(int i=0;i<x;i++) if(!v2[ldt[nod][i]])dfs(ldt[nod][i]);
lc[nc].push_back(nod);
}
int main(){
int n, m;
ifstream f("ctc.in");
ofstream g("ctc.out");
f>>n>>m;
int x, y;
while(m--){
f>>x>>y;
lda[x].push_back(y);
ldt[y].push_back(x);
}
for(int i=1;i<=n;i++)if(!v1[i]) dfs1(i);
for(int i=l.size()-1; i>=0;i--) if(!v2[l[i]]){
nc++;
dfs(l[i]);
}
g<<nc<<endl;
for(int i=1;i<=nc;i++){
sort(lc[i].begin(), lc[i].end());
for(int j=0;j<lc[i].size();j++) g<<lc[i][j]<<' ';
g<<endl;
}
}