Advertisement
a53

ctcmax

a53
Mar 2nd, 2020
188
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.47 KB | None | 0 0
  1. #include <iostream>
  2. #define N 101
  3. using namespace std;
  4. int n,m,a[N][N],nrc=1,suc[N],pred[N];
  5.  
  6. void citire()
  7. {
  8. int x,y;
  9. cin>>n>>m;
  10. for(int i=1;i<=m;++i)
  11. cin>>x>>y,a[x][y]=1;
  12. }
  13.  
  14. void dfsuc(int nod)
  15. {
  16. suc[nod]=nrc;
  17. for(int k=1;k<=n;++k)
  18. if(a[nod][k]==1&&suc[k]==0)
  19. dfsuc(k);
  20. }
  21.  
  22. void dfpred(int nod)
  23. {
  24. pred[nod]=nrc;
  25. for(int k=1;k<=n;++k)
  26. if(a[k][nod]==1&&pred[k]==0)
  27. dfpred(k);
  28. }
  29.  
  30. int main()
  31. {
  32. citire();
  33. nrc=1;
  34. for(int i=1;i<=n;++i)
  35. if(suc[i]==0)
  36. {
  37. dfsuc(i),dfpred(i);
  38. for(int j=1;j<=n;j++)
  39. if(suc[j]!=pred[j])
  40. suc[j]=pred[j]=0;
  41. ++nrc;
  42. }
  43. int mk=0,k; /// mk = numarul maxim de varfuri pe care le are ocomponenta tare conexa
  44. for(int i=1;i<nrc;++i)
  45. {
  46. k=0; /// k = numara varfurile din componenta i
  47. for(int j=1;j<=n;j++)
  48. if(suc[j]==i)
  49. ++k;
  50. if(k>mk)
  51. mk=k;
  52. }
  53. for(int i=1;i<nrc;++i)
  54. {
  55. k=0; /// k = numara varfurile din componenta i
  56. for(int j=1;j<=n;++j)
  57. if(suc[j]==i)
  58. ++k;
  59. if(k==mk) /// Daca numarul de varfuri e maxim
  60. {
  61. for(int j=1;j<=n;++j) /// afisam componenta respectiva
  62. if(suc[j]==i)
  63. cout<<j<<' ';
  64. cout<<'\n';
  65. }
  66. }
  67. return 0;
  68. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement