Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- #include <string>
- #include <stack>
- #include <set>
- #include <map>
- //#include "optimization.h"
- #include <unordered_map>
- #include <cassert>
- #include <cstdio>
- #include <algorithm>
- using namespace std;
- int n, m;
- vector<bool> mark;
- vector<int> comp;
- vector<vector<int>> graph;
- vector<vector<int>> graph2;
- vector<int> order;
- void dfs1(int v) {
- mark[v] = true;
- for (auto u: graph[v]) {
- if (!mark[u]) dfs1(u);
- }
- order.push_back(v);
- }
- void dfs2(int v, int cc) {
- comp[v] = cc;
- for (auto u: graph2[v]) {
- if (comp[u] == -1) {
- dfs2(u, cc);
- }
- }
- }
- int main() {
- cin >> n >> m;
- vector<vector<char>> color(2, vector<char>(n));
- for (int i = 0; i < n; i++){
- char tmp;
- cin >> tmp;
- if (tmp == 'R'){
- color[0][i] = 'B';
- color[1][i]= 'G';
- }
- else if (tmp == 'B'){
- color[0][i] = 'R';
- color[1][i]= 'G';
- }
- else{
- color[0][i] = 'R';
- color[1][i]= 'B';
- }
- }
- // vector<bool> x((n+1)*2, 0);
- graph.resize(n * 2, vector<int>(0));
- graph2.resize(n * 2, vector<int>(0));
- for (int i = 0; i < m; i++) {
- int a, b;
- cin >> a >> b;
- a--;b--;
- for(int k = 0; k < 2; k++){
- for(int j = 0; j < 2; j++){
- if(color[k][a] == color[j][b]){
- graph[2 * a + 1 - k].push_back(2 * b + j);
- graph[2 * b + 1 - j].push_back(2 * a + k);
- graph2[2 * b + j].push_back(2 * a+ 1 - k);
- graph2[2 * a + k].push_back(2 * b + 1 - j);
- }
- }
- }
- }
- mark.resize(2 * (n), false);
- for (int i = 0; i < 2 * n; i+=1) {
- if (!mark[i]) dfs1(i);
- }
- comp.resize(2 * (n), -1);
- reverse(order.begin(), order.end());
- int cc = 0;
- for (auto v: order) {
- if (comp[v] == -1) {
- dfs2(v, ++cc);
- }
- }
- for (int i=0; i<n; ++i)
- if (comp[i*2] == comp[i*2+1]) {
- cout << ("Impossible");
- return 0;
- }
- int j = 0;
- for (int i = 0; i < 2*n; i+=2) {
- cout << color[(comp[i + 1] > comp[i])][j++];
- }
- cout << '\n';
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement