Problem p02735 (C++)

Buggy submission (status: Time Limit Exceeded):
#include <bits/stdc++.h>
using namespace std;
#define SZ(v) int((v).size())
#define ALL(vec) begin(vec), end(vec)
typedef long long i64;
template <typename T> inline bool uax(T &x, T y) {
  return (y > x) ? x = y, true : false;
}
template <typename T> inline bool uin(T &x, T y) {
  return (y < x) ? x = y, true : false;
}
#ifdef Rahul
#define error(args...)                                                         \
  {                                                                            \
    string _s = #args;                                                         \
    replace(_s.begin(), _s.end(), ',', ' ');                                   \
    stringstream _ss(_s);                                                      \
    istream_iterator<string> _it(_ss);                                         \
    err(_it, args);                                                            \
  }
#else
#define error(...) 42;
#endif
string to_string(char c) { return "'" + string(1, c) + "'"; }
string to_string(string s) { return '"' + s + '"'; }
string to_string(const char *s) { return to_string((string)s); }
template <typename A> string to_string(A);
template <typename A, typename B> string to_string(pair<A, B> p) {
  return "(" + to_string(p.first) + ": " + to_string(p.second) + ")";
}
template <typename A> string to_string(A v) {
  bool f = false;
  string r = "{";
  for (auto x : v) {
    if (f)
      r += ", ";
    r += to_string(x);
    f = true;
  }
  return r += "}";
}
template <typename A> string to_string(vector<vector<A>> v) {
  string r;
  for (auto x : v)
    r += "\n" + to_string(x);
  return r;
}
int Nerr;
template <typename A> string to_string(A *p) {
  return to_string(vector<A>(p, p + Nerr));
}
void err(istream_iterator<string>) { cerr << endl; }
template <typename T, typename... Args>
void err(istream_iterator<string> it, T a, Args... args) {
  cerr << *it << " =: " << to_string(a) << "; ";
  err(++it, args...);
}
template <typename T> void kek(T ans) {
  cout << ans << endl;
  exit(0);
}
#define Lu(...) [&](auto &&u) { return __VA_ARGS__; }
#define Luv(...) [&](auto &&u, auto &&v) { return __VA_ARGS__; }
int const MOD = 1e9 + 7;
long long const INF = 1e18 + 42;
/***********************************************************************/
const int N = 128;
int a[N][N];
int b[N][N];
int n, m;

void dfs(int x, int y, int t, int val) {
  if (x > n or y > m or b[x][y] != t)
    return;
  uin(a[x][y], val);
  dfs(x + 1, y, t, val);
  dfs(x, y + 1, t, val);
}
int32_t main() {
  cin.tie(nullptr)->sync_with_stdio(false);

  fill_n(a[0], N * N, MOD);
  cin >> n >> m;
  for (int i = 1; i <= n; ++i) {
    string s;
    cin >> s;
    for (int j = 1; j <= m; ++j) {
      b[i][j] = s[j - 1] == '#';
    }
  }
  a[1][0] = a[0][1] = 0;
  for (int x = 1; x <= n; ++x) {
    for (int y = 1; y <= m; ++y) {
      dfs(x, y, b[x][y], b[x][y] + min(a[x - 1][y], a[x][y - 1]));
    }
  }
  kek(a[n][m]);
}


Fixed submission:
#include <bits/stdc++.h>
using namespace std;
#define SZ(v) int((v).size())
#define ALL(vec) begin(vec), end(vec)
typedef long long i64;
template <typename T> inline bool uax(T &x, T y) {
  return (y > x) ? x = y, true : false;
}
template <typename T> inline bool uin(T &x, T y) {
  return (y < x) ? x = y, true : false;
}
#ifdef Rahul
#define error(args...)                                                         \
  {                                                                            \
    string _s = #args;                                                         \
    replace(_s.begin(), _s.end(), ',', ' ');                                   \
    stringstream _ss(_s);                                                      \
    istream_iterator<string> _it(_ss);                                         \
    err(_it, args);                                                            \
  }
#else
#define error(...) 42;
#endif
string to_string(char c) { return "'" + string(1, c) + "'"; }
string to_string(string s) { return '"' + s + '"'; }
string to_string(const char *s) { return to_string((string)s); }
template <typename A> string to_string(A);
template <typename A, typename B> string to_string(pair<A, B> p) {
  return "(" + to_string(p.first) + ": " + to_string(p.second) + ")";
}
template <typename A> string to_string(A v) {
  bool f = false;
  string r = "{";
  for (auto x : v) {
    if (f)
      r += ", ";
    r += to_string(x);
    f = true;
  }
  return r += "}";
}
template <typename A> string to_string(vector<vector<A>> v) {
  string r;
  for (auto x : v)
    r += "\n" + to_string(x);
  return r;
}
int Nerr;
template <typename A> string to_string(A *p) {
  return to_string(vector<A>(p, p + Nerr));
}
void err(istream_iterator<string>) { cerr << endl; }
template <typename T, typename... Args>
void err(istream_iterator<string> it, T a, Args... args) {
  cerr << *it << " =: " << to_string(a) << "; ";
  err(++it, args...);
}
template <typename T> void kek(T ans) {
  cout << ans << endl;
  exit(0);
}
#define Lu(...) [&](auto &&u) { return __VA_ARGS__; }
#define Luv(...) [&](auto &&u, auto &&v) { return __VA_ARGS__; }
int const MOD = 1e9 + 7;
long long const INF = 1e18 + 42;
/***********************************************************************/
const int N = 128;
int a[N][N];
int b[N][N];
int n, m;

void dfs(int x, int y, int t, int val) {
  if (x > n or y > m or b[x][y] != t)
    return;
  if (!uin(a[x][y], val))
    return;
  dfs(x + 1, y, t, val);
  dfs(x, y + 1, t, val);
}
int32_t main() {
  cin.tie(nullptr)->sync_with_stdio(false);

  fill_n(a[0], N * N, MOD);
  cin >> n >> m;
  for (int i = 1; i <= n; ++i) {
    string s;
    cin >> s;
    for (int j = 1; j <= m; ++j) {
      b[i][j] = s[j - 1] == '#';
    }
  }
  a[1][0] = a[0][1] = 0;
  for (int x = 1; x <= n; ++x) {
    for (int y = 1; y <= m; ++y) {
      dfs(x, y, b[x][y], b[x][y] + min(a[x - 1][y], a[x][y - 1]));
    }
  }
  kek(a[n][m]);
}