#include <bits/stdc++.h>
//#define int long long
#define all(x) (x).begin(), (x).end()
#define pi pair<int, int>
#define f first
#define s second
using namespace std;
vector<int> dx{0, 1, 0, -1},
dy{1, 0, -1, 0};
void solve() {
int n, m;
cin >> n >> m;
vector<vector<char>> a(n, vector<char>(m));
vector<vector<pi>> g(n * m);
for (int i = 0; i < n; ++i) {
for (int j = 0; j < m; ++j) {
cin >> a[i][j];
}
}
for (int i = 0; i < n; ++i) {
for (int j = 0; j < m; ++j) {
if (a[i][j] == '*') continue;
for (int k = 0; k < 4; ++k) {
int x = i + dx[k], y = j + dy[k];
if (x < 0 || x >= n || y < 0 || y >= m) continue;
if (a[i][j] == a[x][y]) {
g[i * m + j].push_back({x * m + y, 0});
} else if (a[x][y] != '*') {
g[i * m + j].push_back({x * m + y, 1});
}
}
}
}
vector<int> dist(n * m, 1e9), was(n * m);
deque<int> q;
dist[0] = 1;
was[0] = 1;
q.push_back(0);
while (!q.empty()) {
int u = q.front();
q.pop_front();
for (auto& [v, w] : g[u]) {
if (was[v]) continue;
was[v] = 1;
dist[v] = dist[u] + w;
if (w == 0) {
q.push_front(v);
} else {
q.push_back(v);
}
}
}
int res = 1;
for (int i = 0; i < n * m; ++i) {
if (dist[i] == 1e9) continue;
res = max(res, dist[i]);
}
cout << res << "\n";
}
signed main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int t = 1;
// cin >> t;
while (t--) {
solve();
}
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |