fork download
  1. #include <bits/stdc++.h> // ZENDA
  2. using namespace std;
  3. #define ll long long
  4. const ll lim=1e3+7;
  5. ll n,res=0,tmp=0;
  6. vector <ll> G[lim];
  7. vector <ll> GV[lim];
  8. bool par[lim],ok[lim];
  9. vector <ll> goc;
  10. void dfs(ll u){
  11. ok[u]=1;
  12. ll td=1;
  13. if (tmp) return ;
  14. for (ll v:G[u]){
  15. if (tmp) return ;
  16. if (!ok[v]){
  17. td=0;
  18. dfs(v);
  19. }
  20. }
  21. if (td) tmp=1;
  22. }
  23. void dfsn(ll u){
  24. ll td=0;
  25. for (ll v:GV[u]){
  26. if (tmp) return;
  27. if (!ok[v]){
  28. td=1;
  29. dfsn(v);
  30. }
  31. }
  32. if (tmp) return;
  33. if (!td){
  34. goc.push_back(u);
  35. tmp=1;
  36. }
  37. }
  38. int main(){
  39. cin.tie(nullptr)->sync_with_stdio(0);
  40. #define F "LONGCA"
  41. if (ifstream(F".inp")){
  42. freopen(F".inp","r",stdin);
  43. freopen(F".out","w",stdout);
  44. }
  45. cin>>n;
  46. for (ll i=1;i<=n;i++){
  47. ll m;cin>>m;
  48. for (ll j=1;j<=m;j++){
  49. ll u;cin>>u;
  50. G[i-1].push_back(u);
  51. GV[u].push_back(i-1);
  52. par[u]=1;
  53. }
  54. }
  55. for (ll i=0;i<n;i++) if (!par[i]) goc.push_back(i);
  56. res=goc.size();
  57. for (ll u:goc){
  58. tmp=0;
  59. dfs(u);
  60. }
  61. ll td1=1;
  62. while (td1){
  63. td1=0;
  64. goc.clear();
  65. for (ll i=0;i<n;i++)
  66. if (!ok[i]){
  67. tmp=0;
  68. dfsn(i);
  69. }
  70. if (goc.size()){
  71. td1=1;
  72. for (ll u:goc){
  73. if (!ok[u]){
  74. tmp=0;
  75. dfs(u);
  76. res++;
  77. }
  78. }
  79. }
  80. }
  81. cout<<res;
  82. return 0;
  83. }
Success #stdin #stdout 0.01s 5328KB
stdin
Standard input is empty
stdout
Standard output is empty