제출 #1173940

#제출 시각아이디문제언어결과실행 시간메모리
1173940viwlesxqTracks in the Snow (BOI13_tracks)C++20
0 / 100
1755 ms1114112 KiB
#include <bits/stdc++.h> using namespace std; //#define int long long #define all(x) x.begin(), x.end() template<class A, class B> bool chmin(A &a, const B &b) { return a > b ? (a = b) == b : false; } template<class A, class B> bool chmax(A &a, const B &b) { return a < b ? (a = b) == b : false; } const int dx[] = {-1, 1, 0, 0}; const int dy[] = {0, 0, -1, 1}; signed main() { cin.tie(nullptr)->sync_with_stdio(false); int n, m; cin >> n >> m; vector<string> s(n); for (int i = 0; i < n; ++i) { cin >> s[i]; } vector<vector<int>> cmp(n, vector<int> (m, 0)); vector<vector<bool>> vis(n, vector<bool> (m, false)); int cnt = 0; auto in = [&](int i, int j) { return i >= 0 && i < n && j >= 0 && j < m; }; function<void(int, int, char)> dfs_target = [&](int i, int j, char S) { cmp[i][j] = cnt; for (int k = 0; k < 4; ++k) { int x = i + dx[k]; int y = j + dy[k]; if (in(x, y) && !cmp[x][y] && s[x][y] == S) { dfs_target(x, y, S); } } }; for (int i = 0; i < n; ++i) { for (int j = 0; j < m; ++j) { if (!cmp[i][j] && s[i][j] != '.') { ++cnt; dfs_target(i, j, s[i][j]); } } } int res = 0; unordered_set<int> F, R; function<void(int, int)> dfs = [&](int i, int j) { vis[i][j] = true; if (s[i][j] == 'F') F.insert(cmp[i][j]); else R.insert(cmp[i][j]); for (int k = 0; k < 4; ++k) { int x = i + dx[k]; int y = j + dy[k]; if (in(x, y) && !vis[x][y] && s[x][y] != '.') { dfs(x, y); } } }; for (int i = 0; i < n; ++i) { for (int j = 0; j < m; ++j) { if (s[i][j] != '.' && !vis[i][j]) { dfs(i, j); res += 1 + min(F.size(), R.size()); F.clear(), R.clear(); } } } cout << res; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...