Pagini recente » Cod sursa (job #2259791) | Cod sursa (job #543806) | Diferente pentru implica-te/arhiva-educationala intre reviziile 77 si 76 | Cod sursa (job #548175) | Cod sursa (job #3151690)
#include <bits/stdc++.h>
using namespace std;
ifstream in("ctc.in");
ofstream out("ctc.out");
int n, m, x, y, c;
int k = 0, st[100005];
vector<int> comp[100005];
int vis[100005];
void dfs(int nod, vector<vector<int>>& adj, int t) {
vis[nod] = c;
for (auto it : adj[nod]) {
if (vis[it] == 0) {
dfs(it, adj, t);
}
}
if (t == 0)
st[++k] = nod;
}
int main()
{
in >> n >> m;
vector<vector<int>> v(n + 5, vector<int>());
vector<vector<int>> vt(n + 5, vector<int>());
for (int i = 1; i <= m; i++) {
in >> x >> y;
v[x].push_back(y);
vt[y].push_back(x);
}
c = 1;
for (int i = 1; i <= n; i++) {
if (vis[i] == 0) {
dfs(i, v, 0);
}
}
for (int i = 1; i <= n; i++)
vis[i] = 0;
c = 0;
while (k > 0) {
if (vis[st[k]] == 0) {
cout << st[k] << '\n';
c++;
dfs(st[k], vt, 1);
}
comp[vis[st[k]]].push_back(st[k]);
k--;
}
out << c << '\n';
for (int i = 1; i <= c; i++) {
for (auto it : comp[i])
out << it << " ";
out << '\n';
}
return 0;
}