Pagini recente » Cod sursa (job #1312075) | Cod sursa (job #386306) | Cod sursa (job #2270430) | Cod sursa (job #1775021) | Cod sursa (job #2367147)
#include <bits/stdc++.h>
#define MAX 100100
using namespace std;
ifstream f("ctc.in");
ofstream g("ctc.out");
int n, m;
bool viz[MAX];
bool vizi[MAX];
int c[MAX], nrc;
vector <int> G[MAX];
vector <int> Gi[MAX];
void dostuff(){
f >> n >> m;
for (int i = 1; i <= m; ++i){
int x, y;
f >> x >> y;
G[x].push_back(y);
Gi[y].push_back(x);
}
}
void dfs(int node){
viz[node] = true;
for (int i = 0; i < G[node].size(); ++i){
int newnode = G[node][i];
if (!viz[newnode]){
dfs(newnode);
}
}
}
void dfsi(int node){
vizi[node] = true;
for (int i = 0; i < Gi[node].size(); ++i){
int newnode = Gi[node][i];
if (!vizi[newnode]){
dfsi(newnode);
}
}
}
void vizclear(){
for (int i = 1; i <= n; ++i){
viz[i] = false;
vizi[i] = false;
}
}
void dothecheck(){
for (int i = 1; i <= n; ++i){
if ((viz[i] == true) && (vizi[i]) == true){
c[i] = nrc;
}
}
}
void afish(){
g << nrc << '\n';
for (int i = 1; i <= nrc; i++){
for (int j = 1; j <= n; j++){
if (c[j] == i){
g << j << ' ';
}
}
g << '\n';
}
}
void domorestuff(){
for (int i = 1; i <= n; ++i){
if (c[i] == 0){
vizclear();
nrc++;
dfs(i);
dfsi(i);
dothecheck();
}
}
afish();
}
int main()
{
dostuff();
domorestuff();
return 0;
}