ProgMe

Untitled

Jun 7th, 2020
462
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.00 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. #include <ext/pb_ds/assoc_container.hpp>
  3. #include <ext/pb_ds/tree_policy.hpp>
  4.  
  5. //#define FILE 10
  6. #define int int64_t
  7.  
  8. using namespace std;
  9. using namespace __gnu_pbds;
  10.  
  11. template<typename T>
  12. using orset = tree <T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>;
  13. template<typename T, typename K>
  14. using ormap = tree <T, K, less<T>, rb_tree_tag, tree_order_statistics_node_update>;
  15. mt19937_64 rnd(chrono::steady_clock::now().time_since_epoch().count());
  16. const int N = 1e2;
  17. int ans = 0;
  18. char a [N + 2] [N + 2];
  19. bool visited [N + 2] [N + 2];
  20. int n, m;
  21.  
  22. void dfs(pair <int, int> koord)
  23. {
  24. if (a [koord.first] [koord.second] == 'G')
  25. ans++;
  26. if (a [koord.first] [koord.second + 1] != '#' && !visited [koord.first] [koord.second + 1])
  27. {
  28. visited [koord.first] [koord.second + 1] = 1;
  29. dfs({koord.first, koord.second + 1});
  30. }
  31. if (a [koord.first] [koord.second - 1] != '#' && !visited [koord.first] [koord.second - 1])
  32. {
  33. visited [koord.first] [koord.second - 1] = 1;
  34. dfs({koord.first, koord.second - 1});
  35. }
  36. if (a [koord.first + 1] [koord.second] != '#' && !visited [koord.first + 1] [koord.second])
  37. {
  38. visited [koord.first + 1] [koord.second] = 1;
  39. dfs({koord.first + 1, koord.second});
  40. }
  41. if (a [koord.first - 1] [koord.second] != '#' && !visited [koord.first - 1] [koord.second])
  42. {
  43. visited [koord.first - 1] [koord.second] = 1;
  44. dfs({koord.first - 1, koord.second});
  45. }
  46. }
  47.  
  48. void solve()
  49. {
  50. ans = 0;
  51. cin >> n >> m;
  52. for (int i = 0; i < n + 2; i++)
  53. {
  54. for (int j = 0; j < m + 2; j++)
  55. a [i] [j] = '#';
  56. }
  57. for (int i = 1; i <= n; i++)
  58. {
  59. for (int j = 1; j <= m; j++)
  60. cin >> a [i] [j];
  61. }
  62. if (a [n] [m] == 'B')
  63. {
  64. cout << "No\n";
  65. return;
  66. }
  67. for (int i = 1; i <= n; i++)
  68. {
  69. for (int j = 1; j <= m; j++)
  70. {
  71. if (a [i] [j] == 'B')
  72. {
  73. if (a [i + 1] [j] == '.')
  74. a [i + 1] [j] = '#';
  75. if (a [i - 1] [j] == '.')
  76. a [i - 1] [j] = '#';
  77. if (a [i] [j + 1] == '.')
  78. a [i] [j + 1] = '#';
  79. if (a [i] [j - 1] == '.')
  80. a [i] [j - 1] = '#';
  81. }
  82. }
  83. }
  84. int num = 0;
  85. for (int i = 1; i <= n; i++)
  86. {
  87. for (int j = 1; j <= m; j++)
  88. {
  89. if (a [i] [j] == 'G')
  90. num++;
  91. }
  92. }
  93. if (a [n] [m] != '#')
  94. dfs({n, m});
  95. if (num == ans)
  96. cout << "Yes\n";
  97. else
  98. cout << "No\n";
  99.  
  100. }
  101.  
  102. int32_t main(int32_t argc, char* argv[]) {
  103. ios::sync_with_stdio(false);
  104. cin.tie(0);cout.tie(0);
  105. #ifdef FILE
  106. freopen("input.txt", "r", stdin);
  107. freopen("output.txt", "w", stdout);
  108. #endif
  109. int t = 1;
  110. cin >> t;
  111. while (t--)
  112. solve();
  113. }
Advertisement
Add Comment
Please, Sign In to add comment