Submission #1255570

#TimeUsernameProblemLanguageResultExecution timeMemory
1255570IskachunTracks in the Snow (BOI13_tracks)C++20
100 / 100
1138 ms1020924 KiB
//{ #include <iostream> #include <vector> #include <map> #include <set> #include <queue> #include <algorithm> #include <cmath> #include <numeric> #include <unordered_map> //} using namespace std; typedef long long ll; vector<string> a; vector<vector<int>> comp; int n, m, curr; vector<int> dx = {1, -1, 0, 0}, dy = {0, 0, 1, -1}; void dfs1 (int x, int y, char c) { comp[x][y] = curr; for (int d = 0; d < 4; d++) { int nx = x + dx[d], ny = y + dy[d]; if (nx < 0 or ny < 0 or nx >= n or ny >= m) continue; if (comp[nx][ny] or a[nx][ny] != c) continue; dfs1(nx, ny, c); } } vector<vector<int>> g; vector<int> vis; int ans; void dfs2 (int v, int cnt = 1) { vis[v] = 1; ans = max(ans, cnt); for (int u : g[v]) { if (vis[u]) continue; dfs2(u, cnt + 1); } } void solve () { cin >> n >> m; a.resize(n); comp = vector<vector<int>> (n, vector<int> (m)); for (auto &x : a) cin >> x; for (int i = 0; i < n; i++) for (int j = 0; j < m; j++) { if (comp[i][j] or a[i][j] == '.') continue; curr++; dfs1(i, j, a[i][j]); } /*for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) cout << comp[i][j] << ' '; cout << '\n'; }*/ g.resize(curr + 1); for (int i = 0; i < n; i++) for (int j = 0; j < m; j++) { if (i and comp[i - 1][j] and comp[i][j] and comp[i - 1][j] != comp[i][j]) { g[comp[i - 1][j]].push_back(comp[i][j]); g[comp[i][j]].push_back(comp[i - 1][j]); } if (j and comp[i][j - 1] and comp[i][j] and comp[i][j - 1] != comp[i][j]) { g[comp[i][j - 1]].push_back(comp[i][j]); g[comp[i][j]].push_back(comp[i][j - 1]); } } ans = 0; vector<int> dis(curr + 1, 1e9); dis[1] = 1; priority_queue<pair<int,int>> q; q.push({-1, 1}); while (q.size()) { auto [d, v] = q.top(); q.pop(); if (-d != dis[v]) continue; for (int u : g[v]) { if (dis[u] <= dis[v] + 1) continue; dis[u] = dis[v] + 1; q.push({-dis[u], u}); } } int ans = 1; for (int x : dis) { if (x == 1e9) continue; ans = max(ans, x); } cout << ans; } int main() { ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); int t = 1; //cin >> t; while (t--) solve(); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...