Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- int cnt;
- array<vector<int>, 35> G, B, S;
- array<int, 35> scc, P, in, R;
- array<bool, 35> vis;
- void dfsb(int pos){
- vis[pos] = 1;
- for(int v : B[pos]){
- if(!vis[v]) dfsb(v);
- }
- P[++cnt] = pos;
- }
- void dfs(int pos){
- vis[pos] = 1;
- scc[pos] = cnt;
- for(int v : G[pos]){
- if(!vis[v]) dfs(v);
- }
- }
- signed main(){
- cin.tie(0), cout.tie(0), ios::sync_with_stdio(0);
- int t, n, m, u, v;
- bool ans;
- char a, b;
- cin >> t;
- while(t--){
- ans = 1;
- cin >> n >> m;
- for(int i = 2; i <= 2 * n + 1; i++){
- G[i].clear();
- B[i].clear();
- }
- for(int i = 1; i <= m; i++){
- cin >> a >> u >> b >> v;
- u *= 2;
- v *= 2;
- if(a == 'm') u++;
- if(b == 'm') v++;
- G[u ^ 1].push_back(v);
- G[v ^ 1].push_back(u);
- B[v].push_back(u ^ 1);
- B[u].push_back(v ^ 1);
- }
- cnt = 0;
- for(int i = 2; i <= 2 * n + 1; i++) vis[i] = 0;
- for(int i = 2; i <= 2 * n + 1; i++){
- if(!vis[i]) dfsb(i);
- }
- cnt = 0;
- for(int i = 2; i <= 2 * n + 1; i++) vis[i] = 0;
- for(int i = 2 * n; i > 0; i--){
- if(!vis[P[i]]){
- cnt++;
- dfs(P[i]);
- }
- }
- for(int i = 1; i <= n; i++){
- if(scc[2 * i] && scc[2 * i] == scc[2 * i + 1]) ans = 0;
- }
- cout << (ans? "GOOD\n" : "BAD\n");
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment