a53

DigrafulCTC

a53
Feb 7th, 2020
341
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.60 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. const int Max=100005;
  4. vector <int>v[Max],vt[Max],bt[Max],poz,ctc2[Max];
  5. stack <int>s;
  6. bool viz[Max];
  7. int nr,n,m,ctc[Max],q,tata[Max],ccc[Max];
  8.  
  9. void dfs1(int nod)
  10. {
  11. viz[nod]=1;
  12. for(int j=0;j<v[nod].size();++j)
  13. {
  14. int vecin=v[nod][j];
  15. if(!viz[vecin])
  16. dfs1(vecin);
  17. }
  18. s.push(nod);
  19. }
  20.  
  21. void dfs2(int nod)
  22. {
  23. viz[nod]=0;ctc[nod]=nr;ctc2[nr].push_back(nod);
  24. for(int j=0;j<vt[nod].size();++j)
  25. {
  26. int vecin=vt[nod][j];
  27. if(viz[vecin])
  28. dfs2(vecin);
  29. }
  30. }
  31.  
  32. void citire()
  33. {
  34. cin>>n>>m;
  35. int x,y;
  36. for(int i=1;i<=m;++i)
  37. cin>>x>>y,v[x].push_back(y),vt[y].push_back(x);
  38. }
  39.  
  40. int main()
  41. {
  42. citire();
  43. for(int i=1;i<=n;++i)
  44. if(!viz[i])
  45. dfs1(i);
  46. while(!s.empty())
  47. {
  48. int nod=s.top();
  49. s.pop();
  50. if(viz[nod])
  51. ++nr,dfs2(nod);
  52. }
  53. nr=1;int x=ctc[1];
  54. for(int i=1;i<=n;++i)
  55. {
  56. if(x!=ctc[i] && ccc[i]==0)
  57. ++nr,x=ctc[i];
  58. for(int j=0;j<ctc2[x].size();++j)
  59. ccc[ctc2[x][j]]=nr;
  60. }
  61. for(int i=1;i<=n;++i)
  62. for(int j=0;j<v[i].size();++j)
  63. {
  64. int vecin=v[i][j];
  65. if(ccc[i]!=ccc[vecin])
  66. bt[ccc[i]].push_back(ccc[vecin]);
  67. }
  68. for(int i=1;i<=n;++i)
  69. sort(bt[i].begin(),bt[i].end());
  70. for(int i=1;i<=nr;++i)
  71. {
  72. for(int j=0;j<bt[i].size();++j)
  73. cout<<bt[i][j]<<' ';
  74. if(bt[i].size()==0)
  75. cout<<0;
  76. cout<<'\n';
  77. }
  78. return 0;
  79. }
Advertisement
Add Comment
Please, Sign In to add comment