artemgf

Две команды

Aug 4th, 2017
107
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.19 KB | None | 0 0
  1. #define _USE_MATH_DEFINES
  2. #include <iostream>
  3. #include <conio.h>
  4. #include <string>
  5. #include <set>
  6. #include <map>
  7. #include <algorithm>
  8. #include <string>
  9. #include <math.h>
  10. #include <vector>
  11. #include <cmath>
  12. #include <sstream>
  13. #include <queue>
  14.  
  15. using namespace std;
  16.  
  17. struct teammade
  18. {
  19.     int number;
  20.     vector <int> like;
  21. };
  22.  
  23. bool d(teammade p1, teammade p2)
  24. {
  25.     if (p1.like.size() == p2.like.size())
  26.         return p1.number > p2.number;
  27.     else
  28.         return p1.like.size() < p2.like.size();
  29. }
  30.  
  31. set <int> answer;
  32. set <int> twiceteam;
  33. vector <teammade> graf;
  34. bool wheree = false;
  35.  
  36. void thinking(vector <teammade> graf, int pos)
  37. {
  38.     queue <int> Next;
  39.     Next.push(graf[pos].number);
  40.  
  41.     while (!Next.empty())
  42.     {
  43.         int v = Next.front() - 1;
  44.         Next.pop();
  45.  
  46.         for (int i = 0; i <= graf[v].like.size() - 1; i++)
  47.         {
  48.             if (twiceteam.find(graf[v].like[i]) == twiceteam.end() && answer.find(graf[v].like[i]) == answer.end())
  49.                 if (twiceteam.find(graf[v].number) != twiceteam.end())
  50.                 {
  51.                     answer.insert(graf[v].like[i]);
  52.                     Next.push(graf[v].like[i]);
  53.                 }
  54.                 else
  55.                     if (answer.find(graf[v].number) != answer.end())
  56.                     {
  57.                         twiceteam.insert(graf[v].like[i]);
  58.                         Next.push(graf[v].like[i]);
  59.                     }
  60.         }
  61.         if (wheree)
  62.             wheree = false;
  63.         else
  64.             wheree = true;
  65.     }
  66. }
  67.  
  68. int main()
  69. {
  70.     int n, prom;
  71.     teammade partgraf;
  72.  
  73.     cin >> n;
  74.  
  75.     for (int i = 1; i <= n; i++)
  76.     {
  77.         partgraf.number = i;
  78.         cin >> prom;
  79.  
  80.         while (prom != 0)
  81.         {
  82.             partgraf.like.push_back(prom);
  83.             cin >> prom;
  84.         }
  85.  
  86.         graf.push_back(partgraf);
  87.         partgraf.like.clear();
  88.     }
  89.  
  90.  
  91.     for(int y=0;y<= graf.size() - 1;)
  92.     {
  93.         if (graf[y].like.size() != 0)
  94.             if (answer.find(graf[y].number) == answer.end() && twiceteam.find(graf[y].number) == twiceteam.end())
  95.             {
  96.                 if (wheree)
  97.                 {
  98.                     answer.insert(graf[y].number);
  99.                     wheree = false;
  100.                 }
  101.                 else
  102.                 {
  103.                     twiceteam.insert(graf[y].number);
  104.                     wheree = true;
  105.                 }
  106.                 thinking(graf, y);
  107.             }
  108.             else
  109.                 y++;
  110.         else
  111.         {
  112.             cout << 0 << endl;
  113.             _getch();
  114.             return 0;
  115.         }
  116.     }
  117.  
  118.     cout << answer.size() << endl;
  119.     for (auto i = answer.begin(); i != answer.end(); i++)
  120.     {
  121.         cout << *i << " ";
  122.     }
  123.  
  124.     _getch();
  125.     return 0;
  126. }
Advertisement
Add Comment
Please, Sign In to add comment