Advertisement
kolbka_

Untitled

Feb 2nd, 2022
126
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.35 KB | None | 0 0
  1.  
  2.  
  3.  
  4. #include <iostream>
  5. #include <vector>
  6. #include <string>
  7. #include <stack>
  8. #include <set>
  9. #include <map>
  10.  
  11. //#include "optimization.h"
  12. #include <unordered_map>
  13.  
  14. #include <cassert>
  15. #include <cstdio>
  16. #include <algorithm>
  17.  
  18.  
  19. using namespace std;
  20. int n, m;
  21. vector<bool> mark;
  22. vector<int> comp;
  23. vector<vector<int>> graph;
  24. vector<vector<int>> graph2;
  25. vector<int> order;
  26.  
  27.  
  28. void dfs1(int v) {
  29. mark[v] = true;
  30. for (auto u: graph[v]) {
  31. if (!mark[u]) dfs1(u);
  32. }
  33. order.push_back(v);
  34. }
  35.  
  36. void dfs2(int v, int cc) {
  37. comp[v] = cc;
  38. for (auto u: graph2[v]) {
  39. if (comp[u] == -1) {
  40. dfs2(u, cc);
  41. }
  42. }
  43. }
  44.  
  45. int main() {
  46.  
  47. cin >> n >> m;
  48. vector<vector<char>> color(2, vector<char>(n));
  49. for (int i = 0; i < n; i++){
  50. char tmp;
  51. cin >> tmp;
  52. if (tmp == 'R'){
  53. color[0][i] = 'B';
  54. color[1][i]= 'G';
  55. }
  56. else if (tmp == 'B'){
  57. color[0][i] = 'R';
  58. color[1][i]= 'G';
  59. }
  60. else{
  61. color[0][i] = 'R';
  62. color[1][i]= 'B';
  63. }
  64. }
  65. // vector<bool> x((n+1)*2, 0);
  66. graph.resize(n * 2, vector<int>(0));
  67. graph2.resize(n * 2, vector<int>(0));
  68. for (int i = 0; i < m; i++) {
  69. int a, b;
  70. cin >> a >> b;
  71. a--;b--;
  72. for(int k = 0; k < 2; k++){
  73. for(int j = 0; j < 2; j++){
  74. if(color[k][a] == color[j][b]){
  75. graph[2 * a + 1 - k].push_back(2 * b + j);
  76. graph[2 * b + 1 - j].push_back(2 * a + k);
  77.  
  78. graph2[2 * b + j].push_back(2 * a+ 1 - k);
  79. graph2[2 * a + k].push_back(2 * b + 1 - j);
  80. }
  81. }
  82. }
  83. }
  84.  
  85. mark.resize(2 * (n), false);
  86. for (int i = 0; i < 2 * n; i+=1) {
  87. if (!mark[i]) dfs1(i);
  88. }
  89. comp.resize(2 * (n), -1);
  90. reverse(order.begin(), order.end());
  91. int cc = 0;
  92. for (auto v: order) {
  93. if (comp[v] == -1) {
  94. dfs2(v, ++cc);
  95. }
  96. }
  97. for (int i=0; i<n; ++i)
  98. if (comp[i*2] == comp[i*2+1]) {
  99. cout << ("Impossible");
  100. return 0;
  101. }
  102. int j = 0;
  103. for (int i = 0; i < 2*n; i+=2) {
  104. cout << color[(comp[i + 1] > comp[i])][j++];
  105.  
  106. }
  107. cout << '\n';
  108. }
  109.  
  110.  
  111.  
  112.  
  113.  
  114.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement