Advertisement
MegaVerkruzo

Untitled

Dec 9th, 2019
116
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.32 KB | None | 0 0
  1. #include <iostream>
  2. #include <cstdio>
  3. #include <vector>
  4. #include <map>
  5. #include <utility>
  6. #include <unordered_map>
  7.  
  8. using namespace std;
  9.  
  10. map<pair<int, int>, int> m;
  11.  
  12. unordered_map<int, int> active;
  13.  
  14. void dfs(vector<int>& now, vector<vector<int>>& gr, vector<int>& used, vector<int>& buf, int vir, int pred) {
  15. used[vir] = 0;
  16. now.push_back(vir);
  17. active[vir] = 1;
  18. for (auto next : gr[vir]) {
  19. if (next != pred || m[{vir, next}] > 1) {
  20. if (used[next]) {
  21. dfs(now, gr, used, buf, next, vir);
  22. } else if (active[vir]){
  23. buf.clear();
  24. vector<int> d = now;
  25. buf.push_back(next);
  26. while (d.back() != next) {
  27. buf.push_back(d.back());
  28. d.pop_back();
  29. }
  30. }
  31. }
  32. }
  33. active[vir] = 0;
  34. now.pop_back();
  35. }
  36.  
  37. int main() {
  38. freopen("input.txt", "r", stdin);
  39. int n, m;
  40. cin >> n >> m;
  41. vector<vector<int>> gr(n + 1);
  42. vector<int> cnt(n + 1, 1);
  43. for (int i = 0; i < m; ++i) {
  44. int x, y;
  45. cin >> x >> y;
  46. m[{x, y}] = 1;
  47. m[{y, x}] = 1;
  48. gr[x].push_back(y);
  49. gr[y].push_back(x);
  50. }
  51. vector<int> now;
  52. vector<int> buf(1, 1);
  53. map<int, int> na;
  54. while (!buf.empty()) {
  55. buf.clear();
  56. vector<int> used(n + 1, 1);
  57. dfs(now, gr, used, buf, 1, 1);
  58. for (int i = 0; i < buf.size(); ++i) {
  59. na[buf[i]] = 1;
  60. }
  61. int main = (*na.begin()).first;
  62. cnt[main] = buf.size();
  63. for (int i = 0; i < buf.size(); ++i) {
  64. if (main == buf[i]) {
  65. continue;
  66. }
  67. cnt[buf[i]] = 0;
  68. for (int l = 0; l < gr[buf[i]].size(); ++l) {
  69. if (na[gr[buf[i]][l]] == 1) {
  70. continue;
  71. }
  72. gr[main].push_back(gr[buf[i]][l]);
  73. gr[buf[i]].push_back(main);
  74. m[{main, gr[buf[i]][l]}] += m[{buf[i], gr[buf[i]][l]}];
  75. m[{gr[buf[i]][l], main}] += m[{gr[buf[i]][l], buf[i]}];
  76. m[{buf[i], gr[buf[i]][l]}] = 0;
  77. m[{gr[buf[i]][l], buf[i]}] = 0;
  78.  
  79. }
  80.  
  81. gr[buf[i]].clear();
  82. }
  83. }
  84. return 0;
  85. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement