Advertisement
ke_timofeeva7

банкет

Mar 12th, 2021
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.70 KB | None | 0 0
  1. #include <iostream>
  2. #include <cmath>
  3. #include <vector>
  4. #include <set>
  5. #include <iterator>
  6. using namespace std;
  7.  
  8. vector <set<int>> gr(100000);
  9. int mark[100000];
  10.  
  11. bool flag = 0;
  12.  
  13. void lol(int v)
  14. {
  15.     for (int i : gr[v])
  16.     {
  17.         if (mark[i] == 1)
  18.         {
  19.             flag = 1;
  20.  
  21.             return;
  22.         }
  23.     }
  24.  
  25. }
  26.  
  27. void obxod(int v)
  28. {
  29.     int k = 1;
  30.  
  31.     if (mark[v] == 1)
  32.     {
  33.         k = 2;
  34.     }
  35.  
  36.     for (int i : gr[v])
  37.     {
  38.         if (mark[i] != k && mark[i] > 0)
  39.         {
  40.             flag = 1;
  41.             return;
  42.         }
  43.  
  44.         if (mark[i] == 0)
  45.         {
  46.             mark[i] = k;
  47.             obxod(i);
  48.         }
  49.     }
  50.  
  51.     return;
  52. }
  53.  
  54.  
  55.  
  56. signed main()
  57. {
  58.     int n, m;
  59.     cin >> n >> m;
  60.  
  61.     int s, f;
  62.    
  63.     // заполнение списка смежности
  64.     for (int i = 0; i < m; i++)
  65.     {
  66.         cin >> s >> f;
  67.         gr[s].insert(f);
  68.         gr[f].insert(s);
  69.     }
  70.  
  71.     // проверка на двудольность графа
  72.     // никакие две соединенные друг с другом вершины не должны быть помечены разными числами. если все же есть такие, то ответ ноу,
  73.     // иначе ес
  74.     for (int i = 1; i <= n; i++)
  75.     {
  76.         if (mark[i] == 0)
  77.         {
  78.             mark[i] = 1;
  79.  
  80.             obxod(i);
  81.  
  82.             if (flag == 1)
  83.             {
  84.                 cout << "NO";
  85.  
  86.                 return 0;
  87.             }
  88.         }
  89.     }
  90.    
  91.     cout << "YES" << endl;
  92.  
  93.     for (int i = 1; i <= n; i++)
  94.     {
  95.         if (mark[i] == 2)
  96.         {
  97.             cout << i << " ";
  98.         }
  99.     }
  100.     return 0;
  101. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement