Problem p02536 (C++) — buggy submission, verdict: Time Limit Exceeded

#include <bits/stdc++.h>
using namespace std;
#define FIO                                                                    \\
  ios_base::sync_with_stdio(false);                                            \\
  cin.tie(0);                                                                  \\
  cout.tie(0)
#define mod 1000000007
#define test                                                                   \\
  int t;                                                                       \\
  cin >> t;                                                                    \\
  while (t--)
#define loop(i, n) for (int i = 0; i < n; i++)
#define pb push_back
#define mp make_pair
typedef long long int ll;
#define MAX 100000
#define debug(i) cout << i < "\\n"
#define f(t1, t2) min(max(a[t1], a[t2]), max(b[t1], b[t2]));

void print_arr(int a[], int n) {
  loop(i, n) { cout << a[i] << " "; }
  cout << "\\n";
}

void print_arr(ll a[], int n) {
  loop(i, n) { cout << a[i] << " "; }
  cout << "\\n";
}

void init(int a[], int n) { loop(i, n) a[i] = 0; }

void visit(vector<vector<int>> &g, int i, vector<int> &vis) {
  vis[i] = 1;
  for (int j = 0; j < g[i].size(); j++) {
    if (vis[g[i][j]] == 0)
      visit(g, g[i][j], vis);
  }
}

int dfs(vector<vector<int>> &g, int n) {
  int color = 0;
  vector<int> vis(n, 0);
  for (int i = 0; i < n; i++) {
    if (vis[i] == 0) {
      ++color;
      // cout<<i<<" "<<color<<"\\n";
      visit(g, i, vis);
    }
  }
  return color;
}

int main() {
  int n, m;
  cin >> n >> m;
  vector<int> em;
  vector<vector<int>> g(n, em);
  for (int i = 0; i < m; i++) {
    int t1, t2;
    cin >> t1 >> t2;
    g[t1 - 1].push_back(t2 - 1);
    g[t2 - 1].push_back(t1 - 1);
  }
  cout << dfs(g, n) - 1 << "\\n";
  return 0;
}

Error: TLE

Fixed submission:

#include <bits/stdc++.h>
using namespace std;
#define FIO                                                                    \\
  ios_base::sync_with_stdio(false);                                            \\
  cin.tie(0);                                                                  \\
  cout.tie(0)
#define mod 1000000007
#define test                                                                   \\
  int t;                                                                       \\
  cin >> t;                                                                    \\
  while (t--)
#define loop(i, n) for (int i = 0; i < n; i++)
#define pb push_back
#define mp make_pair
typedef long long int ll;
#define MAX 100000
#define debug(i) cout << i < "\\n"
#define f(t1, t2) min(max(a[t1], a[t2]), max(b[t1], b[t2]));

void print_arr(int a[], int n) {
  loop(i, n) { cout << a[i] << " "; }
  cout << "\\n";
}

void print_arr(ll a[], int n) {
  loop(i, n) { cout << a[i] << " "; }
  cout << "\\n";
}

void init(int a[], int n) { loop(i, n) a[i] = 0; }

void visit(vector<vector<int>> g, int i, int vis[]) {
  if (vis[i] == 1)
    return;
  vis[i] = 1;
  loop(j, g[i].size()) { visit(g, g[i][j], vis); }
}

int dfs(vector<vector<int>> g, int n) {
  int color = 0;
  int vis[n];
  init(vis, n);
  for (int i = 0; i < n; i++) {
    if (vis[i] == 0) {
      ++color;
      visit(g, i, vis);
    }
  }
  return color;
}

int main() {
  int n, m;
  cin >> n >> m;
  vector<int> em;
  vector<vector<int>> g(n, em);
  loop(i, m) {
    int t1, t2;
    cin >> t1 >> t2;
    g[t1 - 1].push_back(t2 - 1);
    g[t2 - 1].push_back(t1 - 1);
  }
  cout << dfs(g, n) - 1 << "\\n";
  return 0;
}