Pagini recente » Cod sursa (job #925127) | Rezultatele filtrării | Cod sursa (job #2759579) | Cod sursa (job #121404) | Cod sursa (job #2165808)
#include <bits/stdc++.h>
using namespace std;
ifstream F("ctc.in");
ofstream G("ctc.out");
int n, m, x, y, K;
vector<int> a[100005], inv[100005], w[100005];
stack<int> st;
bool v[100005];
void dfs(int nod){
v[nod] = 1;
for(auto it:a[nod]){
if(!v[it]) dfs(it);
}
st.push(nod);
}
void dfs1(int nod){
v[nod] = 0;
for(auto it:inv[nod]){
if(v[it]) dfs1(it);
}
w[K].push_back(nod);
}
int main()
{
F >> n >> m;
for(int i = 1; i <= m; ++ i){
F >> x >> y;
a[x].push_back(y);
inv[y].push_back(x);
}
for(int i = 1; i <= n; ++ i)
if(!v[i]) dfs(i);
while(!st.empty()){
x = st.top();
if(v[x]){
++K;
dfs1(x);
}
st.pop();
}
G << K << '\n';
for(int i = 1; i <= n; ++ i){
for(auto it: w[i]) G << it<< " ";
G << '\n';
}
return 0;
}