Guest User

Untitled

a guest
Jun 20th, 2018
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.70 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <list>
  4.  
  5. using namespace std;
  6.  
  7. int grupa[10000];
  8. bool zbadany[10000];
  9. int main()
  10. {
  11. int a,s,i,w,u,wl,n;
  12. cin >> n;
  13. // int wynik[n];
  14. // bool zbadany[n];
  15. //int *grupa = new int[n];
  16. //bool *zbadany = new bool[n];
  17. vector< list<int> > anty(n);
  18. vector< list<int> > sym(n);
  19.  
  20. list<int>::iterator it;
  21.  
  22. cin >> a;
  23. for(i=0;i<a;i++)
  24. {
  25. cin >> w; cin >> u;
  26. anty[w].push_back(u);
  27. }
  28. cin >> s;
  29. for(i=0;i<s;i++)
  30. {
  31. cin >> w; cin >> u;
  32. sym[w].push_back(u);
  33. }
  34. // dane wczytywane poprawnie
  35.  
  36.  
  37. grupa[0] = 0;// 0 - urzednik 0 do tury 0
  38. zbadany[0] = false;
  39. for(i=1;i<n;i++)
  40. {
  41. grupa[i] = 2; // 2 - brak przyznanej grupy
  42. zbadany[i] = false;
  43. }
  44. bool ok=true;
  45. list<int> ls_wyk;
  46. for(i=0; i<n && ok; i++)
  47. {
  48. if ( grupa[i] != 2 && zbadany[i] ) // jest przyznana
  49. continue;
  50. else
  51. {
  52. grupa[i] = grupa[0];
  53. ls_wyk.push_front(i);
  54.  
  55. while( !ls_wyk.empty() && ok )
  56. {
  57. wl = ls_wyk.front();
  58. //if( !sym[wl].empty() )
  59. //{
  60. for( it=sym[wl].begin(); it != sym[wl].end(); it++ )
  61. {
  62. if( (grupa[wl] == 1 && grupa[*it] == 1) || (grupa[wl] == 0 && grupa[*it] == 0) )
  63. ;
  64. else if (grupa[*it] == 2 && grupa[wl] == 2)
  65. ls_wyk.push_front(*it);
  66. else
  67. {
  68. if( (grupa[wl] == 1 && grupa[*it] == 0) || (grupa[wl] == 0 && grupa[*it] == 1) )
  69. {
  70. ok = false;
  71. break;
  72. }
  73. else
  74. {
  75. if( grupa[*it] == 2 )
  76. {
  77. grupa[*it] = grupa[wl];
  78. ls_wyk.push_back(*it);
  79. }
  80. else
  81. {
  82. grupa[wl] = grupa[*it];
  83. ls_wyk.push_back(wl);
  84. }
  85. }
  86. }
  87. }
  88. //}
  89. //if ( !anty[wl].empty() )
  90. //{
  91. for( it=anty[wl].begin(); it != anty[wl].end(); it++ )
  92. {
  93. if( (grupa[wl] == 1 && grupa[*it] == 0) || (grupa[wl] == 0 && grupa[*it] == 1) )
  94. ;
  95. else if (grupa[*it] == 2 && grupa[wl] == 2)
  96. ls_wyk.push_front(*it);
  97. else
  98. {
  99. if( (grupa[wl] == 1 && grupa[*it] == 1) || (grupa[wl] == 0 && grupa[*it] == 0) )
  100. {
  101. ok = false;
  102. break;
  103. }
  104. else
  105. {
  106. if( grupa[*it] == 2 )
  107. {
  108. grupa[*it] = !grupa[wl];
  109. ls_wyk.push_back(*it);
  110. }
  111. else
  112. {
  113. grupa[wl] = !grupa[*it];
  114. ls_wyk.push_back(wl);
  115. }
  116. }
  117. }
  118.  
  119. }
  120. //}
  121. if( grupa[wl] == 0 || grupa[wl] == 1 )
  122. zbadany[wl] = true;
  123. //if( zbadany[wl] )
  124. ls_wyk.pop_front();
  125.  
  126. }
  127.  
  128. }
  129. }
  130.  
  131. if (!ok || n==0 )
  132. cout << "NO";
  133. else
  134. for(i=0;i<n;i++)
  135. cout << grupa[i] << endl;
  136.  
  137. // system("pause");
  138. return 0;
  139. }
Add Comment
Please, Sign In to add comment