Submission #1255566

#TimeUsernameProblemLanguageResultExecution timeMemory
1255566IskachunTracks in the Snow (BOI13_tracks)C++20
31.77 / 100
969 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; vis.resize(curr + 1); dfs2(1); 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...