Pagini recente » Monitorul de evaluare | Cod sursa (job #1874826) | Cod sursa (job #746735) | Cod sursa (job #1246571) | Cod sursa (job #2523809)
#include <bits/stdc++.h>
using namespace std;
ifstream in("ctc.in");
ofstream out("ctc.out");
const int Nmax = 1e5 + 5;
bool seen[Nmax];
int S[Nmax];
int N,M,L;
set<int> G[Nmax],Gt[Nmax];
static inline void dfs(int node) {
seen[node] = 1;
for(auto i : G[node])
if(!seen[i])
dfs(i);
S[++L] = node;
}
static inline void afis(int node, bool K) {
seen[node] = 1;
if(K)
out << node << " ";
for(auto i : Gt[node])
if(!seen[i])
afis(i,K);
}
int main() {
in >> N >> M;
while(M--) {
int x,y;
in >> x >> y;
G[x].insert(y);
Gt[y].insert(x);
}
for(int i = 1; i <= N; ++i)
if(!seen[i])
dfs(i);
M = 0;
memset(seen,0,sizeof(seen));
for(int i = N ; i >= 1; --i)
if(!seen[S[i]])
afis(S[i],0),M++;
out << M << '\n';
memset(seen,0,sizeof(seen));
for(int i = N ; i >= 1; --i)
if(!seen[S[i]])
afis(S[i],1),out << '\n';
return 0;
}