Guest User

thanksone's TIOJ 1149

a guest
Nov 15th, 2021
222
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.58 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. int cnt;
  4. array<vector<int>, 35> G, B, S;
  5. array<int, 35> scc, P, in, R;
  6. array<bool, 35> vis;
  7. void dfsb(int pos){
  8.     vis[pos] = 1;
  9.     for(int v : B[pos]){
  10.         if(!vis[v]) dfsb(v);
  11.     }
  12.     P[++cnt] = pos;
  13. }
  14. void dfs(int pos){
  15.     vis[pos] = 1;
  16.     scc[pos] = cnt;
  17.     for(int v : G[pos]){
  18.         if(!vis[v]) dfs(v);
  19.     }
  20. }
  21. signed main(){
  22.     cin.tie(0), cout.tie(0), ios::sync_with_stdio(0);
  23.     int t, n, m, u, v;
  24.     bool ans;
  25.     char a, b;
  26.     cin >> t;
  27.     while(t--){
  28.         ans = 1;
  29.         cin >> n >> m;
  30.         for(int i = 2; i <= 2 * n + 1; i++){
  31.             G[i].clear();
  32.             B[i].clear();
  33.         }
  34.         for(int i = 1; i <= m; i++){
  35.             cin >> a >> u >> b >> v;
  36.             u *= 2;
  37.             v *= 2;
  38.             if(a == 'm') u++;
  39.             if(b == 'm') v++;
  40.             G[u ^ 1].push_back(v);
  41.             G[v ^ 1].push_back(u);
  42.             B[v].push_back(u ^ 1);
  43.             B[u].push_back(v ^ 1);
  44.         }
  45.         cnt = 0;
  46.         for(int i = 2; i <= 2 * n + 1; i++) vis[i] = 0;
  47.         for(int i = 2; i <= 2 * n + 1; i++){
  48.             if(!vis[i]) dfsb(i);
  49.         }
  50.         cnt = 0;
  51.         for(int i = 2; i <= 2 * n + 1; i++) vis[i] = 0;
  52.         for(int i = 2 * n; i > 0; i--){
  53.             if(!vis[P[i]]){
  54.                 cnt++;
  55.                 dfs(P[i]);
  56.             }
  57.         }
  58.         for(int i = 1; i <= n; i++){
  59.             if(scc[2 * i] && scc[2 * i] == scc[2 * i + 1]) ans = 0;
  60.         }
  61.         cout << (ans? "GOOD\n" : "BAD\n");
  62.     }
  63.     return 0;
  64. }
Advertisement
Add Comment
Please, Sign In to add comment