DuongNhi99

THMECUNG

Nov 15th, 2021 (edited)
134
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.71 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. using ll = long long;
  5. using ii = pair<int, int>;
  6.  
  7. const int maxN = 1e3 + 5;
  8. const int maxM = 1e4 + 5;
  9. const ll INF = 2e18 + 7;
  10. const int MOD = 998244353;
  11.  
  12. int dx[4] = {0, 1, 0, -1};
  13. int dy[4] = {1, 0, -1, 0};
  14.  
  15. int n, m;
  16. string s[maxM];
  17.  
  18. int ans = 0;
  19. int h[maxN][maxN];
  20. bool visited[maxN][maxN], visit[maxN][maxN];
  21.  
  22. void bfs(int x, int y) {
  23.     memset(visit, false, sizeof(visit));
  24.     visit[x][y] = true;
  25.     memset(h, 0, sizeof(h));
  26.     queue<ii> q;
  27.     q.push(make_pair(x, y));
  28.  
  29.     while (!q.empty()) {
  30.         int ux = q.front().first;
  31.         int uy = q.front().second;
  32.         q.pop();
  33.  
  34.         for (int i = 0; i < 4; i++) {
  35.             int u = ux + dx[i];
  36.             int v = uy + dy[i];
  37.  
  38.             if (u <= 0 || u > n) continue;
  39.             if (v <= 0 || v > m) continue;
  40.             if (visit[u][v]) continue;
  41.  
  42.             if (s[u][v] == '.') {
  43.                 visit[u][v] = true;
  44.                 q.push(make_pair(u, v));
  45.                 h[u][v] = h[ux][uy] + 1;
  46.                 ans = max(ans, h[u][v]);
  47.             }
  48.         }
  49.     }
  50. }
  51.  
  52. int main() {
  53. #ifdef LOCAL
  54.     freopen("in4.txt", "r", stdin);
  55. #else
  56.     freopen("THMECUNG.inp", "r", stdin);
  57.     freopen("THMECUNG.out", "w", stdout);
  58. #endif
  59.     ios_base::sync_with_stdio(false);
  60.     cin.tie(nullptr);
  61.  
  62.     cin >> n >> m;
  63.     for (int i = 1; i <= n; i++) {
  64.         cin >> s[i];
  65.         s[i] = ' ' + s[i];
  66.     }
  67.  
  68.     for (int i = 1; i <= n; i++)
  69.         for (int j = 1; j <= m; j++)
  70.             if (s[i][j] == '.'  && !visited[i][j]) {
  71.                 visited[i][j] = true;
  72.                 bfs(i, j);
  73.             }
  74.  
  75.     cout << ans << '\n';
  76.  
  77.     return 0;
  78. }
  79.  
Add Comment
Please, Sign In to add comment