Advertisement
Guest User

Untitled

a guest
Mar 19th, 2018
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.83 KB | None | 0 0
  1.  
  2. #include <iostream>
  3. #include <vector>
  4.  
  5. bool dfs(const std::vector<std::vector<bool> > &relationships, const bool &parity, std::vector<char> &is_visited, const int &human) {
  6.  
  7. is_visited[human] = parity;
  8. for (int i = 0; i < relationships[human].size(); ++i) {
  9. if (relationships[human][i] == 0) {
  10. if (is_visited[human] == is_visited[i]) {
  11. return false;
  12. }
  13. else if (is_visited[i] == 2) {
  14. if (!dfs(relationships, !parity, is_visited, i)) {
  15. return false;
  16. }
  17. }
  18. }
  19. }
  20. return true;
  21.  
  22. }
  23. int main() {
  24. unsigned n, m;
  25.  
  26. std::cin >> n >> m;
  27. std::vector<std::vector<bool> > relationships(n, std::vector<bool>(n, 0));
  28.  
  29. for (int i = 0; i < m; ++i) {
  30. int first, second;
  31. std::cin >> first >> second;
  32. --first, --second;
  33. relationships[first][second] = 1;
  34. relationships[second][first] = 1;
  35. }
  36.  
  37. for (int i = 0; i < n; ++i) {
  38. relationships[i][i] = 1;
  39. }
  40.  
  41. bool solution = true;
  42. std::vector<char> is_visited(n, 2);
  43. for (int i = 0; i < n; ++i) {
  44. if (is_visited[i] == 2) {
  45. solution = dfs(relationships, 0, is_visited, i);
  46. }
  47. if (!solution) {
  48. break;
  49. }
  50. }
  51. if (!solution) {
  52. std::cout << -1 << "\n";
  53. return 0;
  54. }
  55. int siz = 0;
  56. for (int i = 0; i < n; ++i) {
  57. if (!is_visited[i])
  58. ++siz;
  59. }
  60. std::cout << siz << "\n";
  61. for (int i = 0; i < n; ++i) {
  62. if (!is_visited[i]) {
  63. std::cout << i + 1 << " ";
  64. }
  65. }
  66. std::cout << '\n';
  67. for (int i = 0; i < n; ++i) {
  68. if (is_visited[i] == 1) {
  69. std::cout << i+1 << " ";
  70. }
  71. }
  72. return 0;
  73. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement