Advertisement
Guest User

Untitled

a guest
Jun 26th, 2017
39
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.30 KB | None | 0 0
  1. //BĄDŹ ELEGANCKI NAJWAŻNIEJSZA NIE JEST KASA
  2. //JP NA 100%
  3. #include <cstdio>
  4. #include <algorithm>
  5. #include <vector>
  6.  
  7. using namespace std;
  8.  
  9. bool kr[5010][5010];
  10. vector <int> t[5010];
  11. pair<int, int> ta[5010];
  12. int stopi,il,posz,ak,ilw,odw[5010],pom,czy,wyn,zam[5010];
  13.  
  14. void wczytaj()
  15. {
  16.     scanf("%d",&il);
  17.     for (int i=1; i<=il; ++i)
  18.     {
  19.         scanf("%d",&stopi);
  20.         ta[i-1].first=stopi;
  21.         ta[i-1].second=i;
  22.         for (int j=1; j<=stopi; ++j)
  23.         {
  24.             scanf("%d",&posz);
  25.             kr[i][posz]=1;
  26.             t[i].push_back(posz);
  27.         }
  28.     }
  29. }
  30. void rob_maks_klike()
  31. {
  32.     sort(ta,ta+il);
  33.     ak=0;
  34.     while (odw[ta[ak].second]==0)
  35.     {
  36.           for (int i=0; i<t[ta[ak].second].size(); ++i)
  37.           if (odw[t[ta[ak].second][i]]==0)
  38.           {
  39.               odw[t[ta[ak].second][i]]=1;
  40.               ++ilw;
  41.           }
  42.           ++ak;
  43.     }
  44.     for (int i=1; i<=il; ++i)
  45.     if (odw[ta[i].second]==0)
  46.     {
  47.         //printf("%d\n",ta[i].second);
  48.         pom=0;
  49.         for (int j=0; j<t[ta[i].second].size(); ++j)
  50.         if (odw[t[ta[i].second][j]]==1) ++pom;
  51.         if (pom==ilw)
  52.         {
  53.                      odw[ta[i].second]=1;
  54.                      ++ilw;
  55.         }
  56.     }
  57. }
  58. void usuwaj()
  59. {
  60.      wyn=1;
  61.      for (int i=i; i<=il; ++i)
  62.      if(odw[i]==1)
  63.      {
  64.          czy=1;
  65.          for (int j=0; j<t[i].size(); ++j)
  66.          if (odw[t[i][j]]==0) {czy=0; break;}        
  67.          if (czy) {++wyn; zam[i]=1;}
  68.      }
  69. }
  70. void zilomazewspracialaczasiekonspiratorzy()
  71. {
  72.      for (int i=1; i<=il; ++i)
  73.      if (odw[i]==0)
  74.      {
  75.         pom=0;
  76.         for (int j=0; j<t[i].size(); ++j)
  77.         if (odw[t[i][j]]==1) ++pom;
  78.         if (pom==ilw-1) zam[i]=1;
  79.      }
  80. }
  81. void zamieniaj()
  82. {
  83.      for (int i=1; i<il; ++i)
  84.          for (int j=i+1; j<=il; ++j)
  85.          if (odw[i]+odw[j]==1&&zam[i]+zam[j]==2)
  86.          ++wyn; else
  87.          if ((odw[i]+odw[j]==0&&kr[i][j]==1)||(odw[i]+odw[j]==2&&kr[i][j]==0)) {wyn=0; return;}
  88. }
  89. int main()
  90. {
  91.    
  92.     wczytaj();
  93.     rob_maks_klike();
  94.     printf("");
  95.     usuwaj();
  96.     zilomazewspracialaczasiekonspiratorzy();
  97.     //for (int i=1; i<=il; ++i)
  98.     //if (zam[i]==1) printf("%d ",i);
  99.     //printf("\n");        
  100.     zamieniaj();
  101.     printf("%d\n",wyn);
  102.     //while (1);
  103. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement