Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- #define ll long long
- #define ld long double
- #define pb push_back
- #define S second
- #define F first
- using namespace std;
- vector<int> top,ans,g[3100],gr[3100];
- int k=0;
- bool used[3100],used1[3100];
- void dfs(int v)
- {
- used[v]=1;
- top.pb(v);
- // cout<<v<<' '<<g[v].size()<<endl;
- for(int i=0;i<g[v].size();i++)
- {
- if(!used[g[v][i]])
- {
- dfs(g[v][i]);
- }
- }
- }
- void dfs1(int v)
- {
- used1[v]=1;
- for(int i=0;i<gr[v].size();i++)
- {
- if(!used1[gr[v][i]])
- {
- dfs1(gr[v][i]);
- }
- }
- }
- int main()
- {
- freopen("input.txt","r",stdin);
- freopen("output.txt","w",stdout);
- int n,m;
- cin>>n>>m;
- for(int i=0;i<m;i++)
- {
- int x,y;
- cin>>x>>y;
- x--;y--;
- g[x].pb(y);
- gr[y].pb(x);
- }
- for(int i=0;i<n;i++)
- {
- if(!used[i])
- {
- dfs(i);
- // return 0;
- }
- }
- for(int i=n-1;i>=0;i--)
- {
- if(!used1[top[i]])
- {
- dfs1(top[i]);
- k++;
- ans.pb(top[i]);
- }
- }
- cout<<k<<endl;
- sort(ans.begin(),ans.end());
- for(int i=0;i<ans.size();i++)
- {
- cout<<ans[i]+1<<' ';
- }
- cout<<endl;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement