Problem Link : CAPCITY
Hint : Topological Sort using DFS
C++ Solution :
#include<bits/stdc++.h> using namespace std; vector<int> adj[100001]; int cnt=0; bool visited[100001]; void topo(int i,int n,vector<int> &s) { visited[i]=1; for(auto it=adj[i].begin();it!=adj[i].end();it++) { if(!visited[*it]) topo(*it,n,s); } s.push_back(i); } void dfs(int v,int n) { visited[v]=1; cnt++; for(auto it=adj[v].begin();it!=adj[v].end();it++) { if(!visited[*it]) dfs(*it,n); } } int main() { int n,m,x,y; cnt=0; cin>>n>>m; for(int i=1;i<=n;i++) { adj[i].clear(); } memset(visited,0,sizeof(visited)); for(int i=1;i<=m;i++) { cin>>x>>y; adj[x].push_back(y); } vector<int>s; topo(1,n,s); memset(visited,0,sizeof(visited)); dfs(s[0],n); set<int>ans; for(int i=0;i<s.size();i++) { if(visited[s[i]]) ans.insert(s[i]); else break; } cout<<cnt<<endl; for(int r: ans) cout<<r<<" "; }