Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "bits/stdc++.h"
- using namespace std;
- #define ll long long
- #define f first
- #define s second
- #define ull unsigned long long int
- const ll mod = 1e9+7;
- #define all(v) v.begin(),v.end()
- #define rll(v) v.rbegin(),v.rend()
- #define pii pair <int , int>
- #define pll pair <ll , ll>
- int tt, tc;
- const int N = 300005;
- const ll INF = 1e18;
- vector<int> adj[N];
- vector<int> adj2[N];
- stack <int> st;
- int vis[N];
- void dfs(int cur)
- {
- if(vis[cur])return;
- vis[cur] = 1;
- for (auto u : adj[cur]) {
- dfs(u );
- }
- st.push(cur);
- }
- void dfs2(int cur)
- {
- if(vis[cur])return;
- vis[cur] = 1;
- for (auto u : adj2[cur]) {
- dfs2(u );
- }
- }
- void solve() {
- int n , m; cin>>n>>m;
- for(int i =0 ; i<m; i++) {
- int u, v;
- cin >> u >> v;
- adj[u].push_back(v);
- }
- for(int i = 1; i<= n; i++)
- {
- if(!vis[i])
- dfs(i);
- }
- for(int i = 1; i<=n;i++)
- {
- vis[i] =0;
- for(int v : adj[i])
- {
- adj2[v].push_back(i);
- }
- }
- int cnt =0 ;
- while(!st.empty())
- {
- int u =st.top();
- st.pop();
- cout<<u<<" ";
- if(!vis[u])
- {
- cnt++;
- dfs2(u);
- }
- }
- cout<<"\n";
- cout<<cnt<<"\n";
- }
- int main() {
- ios::sync_with_stdio(0); cin.tie(0);
- tt = 1, tc = 1; //cin >> tt;
- while (tt--) solve(), tc++;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement