Pagini recente » Cod sursa (job #3255803) | Cod sursa (job #3198106) | Cod sursa (job #2540833) | Cod sursa (job #3002600) | Cod sursa (job #2666294)
#include <bits/stdc++.h>
using namespace std;
struct node {
bool b, b2;
vector<int> in;
vector<int> out;
};
vector<node> g;
vector<vector<int>> v;
stack<int> s;
void d1(int n) {
g[n].b=true;
for(auto it:g[n].out)
if(!g[it].b)
d1(it);
s.push(n);
}
void d2(int n) {
v.back().push_back(n);
g[n].b2=1;
for(auto i:g[n].in)
if(!g[i].b2)
d2(i);
}
int main() {
ifstream fin("ctc.in");
ofstream fout("ctc.out");
int n, m;
fin>>n>>m;
g.resize(n+1);
for(; m; m--) {
int a, b;
fin>>a>>b;
g[a].out.push_back(b);
g[b].in.push_back(a);
}
for(m=1; m<=n; m++)
if(!g[m].b)
d1(m);
while(true) {
v.push_back({});
while(!s.empty() && g[s.top()].b2)
s.pop();
if(s.empty())
break;
d2(s.top());
}
fout<<v.size()-1<<"\n";
for(auto i:v) {
for(auto j:i)
fout<<j<<" ";
fout<<"\n";
}
return 0;
}