Advertisement
Guest User

Untitled

a guest
Feb 21st, 2019
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.00 KB | None | 0 0
  1. #include <iostream>
  2. #include <fstream>
  3. #include <string>
  4. #include <vector>
  5. #include <stack>
  6. #include <set>
  7. #include <stdlib.h>
  8. #include <algorithm>
  9. #include <stack>
  10.  
  11. using namespace std;
  12.  
  13. void Reverse_Sort(vector<pair<int, int>>& arr, int l, int r) {
  14. int i = l, j = r;
  15. int obj = arr[(l + r) / 2].second;
  16.  
  17. while (i <= j) {
  18. while (arr[i].second > obj)
  19. i++;
  20. while (arr[j].second < obj)
  21. j--;
  22. if (i <= j) {
  23. swap(arr[i], arr[j]);
  24. i++;
  25. j--;
  26. }
  27. };
  28.  
  29. if (l < j)
  30. Reverse_Sort(arr, l, j);
  31.  
  32. if (i < r)
  33. Reverse_Sort(arr, i, r);
  34. }
  35.  
  36. void Sort(vector<int>& arr, int l, int r) {
  37. int i = l, j = r;
  38. int obj = arr[(l + r) / 2];
  39.  
  40. while (i <= j) {
  41. while (arr[i] < obj)
  42. i++;
  43. while (arr[j] > obj)
  44. j--;
  45. if (i <= j) {
  46. swap(arr[i], arr[j]);
  47. i++;
  48. j--;
  49. }
  50. };
  51.  
  52. if (l < j)
  53. Sort(arr, l, j);
  54.  
  55. if (i < r)
  56. Sort(arr, i, r);
  57. }
  58.  
  59.  
  60. int a = 1;
  61.  
  62.  
  63.  
  64.  
  65.  
  66.  
  67. void dfs(vector<vector<bool>>& relations,int i,vector<pair<int, int>>& post, vector<bool>& used ){
  68. for (int j = 0; j < relations[i].size(); ++j) {
  69. if (relations[i][j]) {
  70. if (!used[j]) {
  71. used[j] = true;
  72. ++a;
  73. dfs(relations, j, post, used);
  74. }
  75. }
  76. }
  77. post[i].first=i+1;
  78. post[i].second=++a;
  79. }
  80.  
  81. bool mymet(vector<vector<bool>>& relations, int pos_in_post, int k,vector<bool>& used, vector<vector<int>>& goal ){
  82.  
  83. if(used[pos_in_post]) {
  84.  
  85. goal[k].push_back(pos_in_post);
  86. used[pos_in_post] = false;
  87.  
  88. for (int j = 0; j < relations[0].size(); ++j)
  89. if (relations[j][pos_in_post])
  90. if (used[j]) {
  91. mymet(relations, j, k, used, goal);
  92. return true;
  93. }
  94. }
  95. return false;
  96. }
  97.  
  98.  
  99.  
  100. vector<vector<std::string>> getList(vector<string>& names, vector<vector<bool>>& relations)
  101. {
  102. int n = relations[0].size();
  103. vector<pair<int, int>> post(n);
  104.  
  105. vector<bool> used(n);
  106.  
  107. vector<vector<int>> goal();
  108.  
  109. used[0] = true;
  110. dfs(relations, 0, post, used);
  111. Reverse_Sort(post, 0, post.size()-1);
  112. int k=0;
  113. for (auto &i : post)
  114. if(!mymet(relations, i.first-1, k, used, goal()))
  115. ++k;
  116. for (auto &i : goal)
  117. Sort(i, 0, i.size()-1);
  118. vector<vector<string>> relust(goal.size());
  119. for(int i=0; i<goal.size(); ++i) {
  120. for (int j = 0; j < goal[i].size(); ++j)
  121. relust[i].push_back(names[goal[i][j]]);
  122. }
  123.  
  124. return relust;
  125. }
  126.  
  127.  
  128.  
  129.  
  130.  
  131.  
  132.  
  133. int main()
  134. {
  135.  
  136. vector<string> names = vector<string>();
  137. vector<vector<bool>> relations;
  138. int startIndex;
  139.  
  140. ifstream fin;
  141. fin.open("input.txt");
  142. if (fin.is_open())
  143. {
  144. string str = "";
  145. getline(fin, str);
  146.  
  147. while (str != "#")
  148. {
  149. names.emplace_back(str.substr(str.find(' ') + 1));
  150. getline(fin, str);
  151. }
  152.  
  153. relations = vector<vector<bool>>(names.size());
  154.  
  155. for (int i = 0; i < names.size(); i++)
  156. {
  157. relations[i] = vector<bool>(names.size());
  158. for (int j = 0; j < names.size(); j++)
  159. relations[i][j] = false;
  160. }
  161.  
  162. getline(fin, str);
  163.  
  164. while (fin)
  165. {
  166. int a = stoi(str.substr(0, str.find(' '))) - 1;
  167. int b = stoi(str.substr(str.find(' '))) - 1;
  168. relations[a][b] = true;
  169. getline(fin, str);
  170. }
  171.  
  172. fin.close();
  173. }
  174.  
  175. vector<vector<string>> res = getList(names, relations);
  176.  
  177. fstream fout;
  178. fout.open("output.txt", ios::out);
  179. for (int i = 0; i < res.size(); i++)
  180. {
  181. for (int j = 0; j < res[i].size(); j++)
  182. fout << res[i][j] << "\n";
  183. fout << "\n";
  184. }
  185. fout.close();
  186.  
  187. return 0;
  188. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement