Problem p02573 (C++)

Buggy submission (status: Runtime Error):
#include <bits/stdc++.h>
using namespace std;

#define ll long long
#define fw(p) for (int w = 0; w < (p); w++)
#define fx(p) for (int x = 0; x < (p); x++)
#define fy(p) for (int y = 0; y < (p); y++)
#define fz(p) for (int z = 0; z < (p); z++)
#define fyg(p, g) for (int y = (g); y < (p); y++)
#define fzg(p, g) for (int z = (g); z < (p); z++)
#define ce(d) cout << d << endl;
#define vecp(p)                                                                \
  int aa;                                                                      \
  cin >> aa;                                                                   \
  (p).push_back(aa);
#define vecpl(p)                                                               \
  long long aa;                                                                \
  cin >> aa;                                                                   \
  (p).push_back(aa);
#define vecps(p)                                                               \
  string aa;                                                                   \
  cin >> aa;                                                                   \
  (p).push_back(aa);
#define vecp2(p)                                                               \
  cin >> aa;                                                                   \
  (p).push_back(aa);
#define vecpl2(p)                                                              \
  long long a b;                                                               \
  cin >> ab;                                                                   \
  (p).push_back(ab);
#define vecps2(p)                                                              \
  string ab;                                                                   \
  cin >> ab;                                                                   \
  (p).push_back(ab);
#define sorts(c) sort((c).begin(), (c).end());
#define reverses(c) reverse((c).begin(), (c).end());
#define vec(b) vector<int>(b);
#define vecl(b) vector<long long>(b);
#define vecs(b) vector<string>(b);
#define pb(b, a) (b).push_back((a));
#define doublece(a, b) cout << (a) << ' ' << (b) << endl;
#define pairs(s) vector<pair<int, int>>(s);
#define pairsp(s)                                                              \
  int aa, bb;                                                                  \
  cin >> aa >> bb;                                                             \
  (s).push_back(make_pair(aa, bb));
#define MOD 1000000007
#define cey ce("Yes")
#define cen ce("No")
#define ceY ce("YES")
#define ceN ce("NO")
int par[100001];
int treesize[100001];
int group = 100000;

int find(int x) { // 親探し
  if (par[x] == x) {
    return x;
  } else {
    int z = find(par[x]);
    par[x] = z;
    return z;
  }
}

bool unit(int x, int y) {

  int xpar = find(x);
  int ypar = find(y);

  if (xpar == ypar) {
    return false;
  } // すでに結合済み
  group--;
  par[ypar] = xpar;
  treesize[xpar] += treesize[ypar];
  return true;
}

int main() {
  int N, M;
  cin >> N >> M;
  group = N;
  fx(N) {
    par[x + 1] = x + 1;
    treesize[x + 1] = 1;
  }
  fx(M) {
    int a, b;
    cin >> a >> b;
    unit(a, b);
  }

  int ans = 0;
  fx(N) {
    int k = treesize[find(x + 1)];
    ans = max(ans, k);
  }
  ce(ans) return 0;
}


Fixed submission:
#include <bits/stdc++.h>
using namespace std;

#define ll long long
#define fw(p) for (int w = 0; w < (p); w++)
#define fx(p) for (int x = 0; x < (p); x++)
#define fy(p) for (int y = 0; y < (p); y++)
#define fz(p) for (int z = 0; z < (p); z++)
#define fyg(p, g) for (int y = (g); y < (p); y++)
#define fzg(p, g) for (int z = (g); z < (p); z++)
#define ce(d) cout << d << endl;
#define vecp(p)                                                                \
  int aa;                                                                      \
  cin >> aa;                                                                   \
  (p).push_back(aa);
#define vecpl(p)                                                               \
  long long aa;                                                                \
  cin >> aa;                                                                   \
  (p).push_back(aa);
#define vecps(p)                                                               \
  string aa;                                                                   \
  cin >> aa;                                                                   \
  (p).push_back(aa);
#define vecp2(p)                                                               \
  cin >> aa;                                                                   \
  (p).push_back(aa);
#define vecpl2(p)                                                              \
  long long a b;                                                               \
  cin >> ab;                                                                   \
  (p).push_back(ab);
#define vecps2(p)                                                              \
  string ab;                                                                   \
  cin >> ab;                                                                   \
  (p).push_back(ab);
#define sorts(c) sort((c).begin(), (c).end());
#define reverses(c) reverse((c).begin(), (c).end());
#define vec(b) vector<int>(b);
#define vecl(b) vector<long long>(b);
#define vecs(b) vector<string>(b);
#define pb(b, a) (b).push_back((a));
#define doublece(a, b) cout << (a) << ' ' << (b) << endl;
#define pairs(s) vector<pair<int, int>>(s);
#define pairsp(s)                                                              \
  int aa, bb;                                                                  \
  cin >> aa >> bb;                                                             \
  (s).push_back(make_pair(aa, bb));
#define MOD 1000000007
#define cey ce("Yes")
#define cen ce("No")
#define ceY ce("YES")
#define ceN ce("NO")
int par[200001];
int treesize[200001];
int group = 100000;

int find(int x) { // 親探し
  if (par[x] == x) {
    return x;
  } else {
    int z = find(par[x]);
    par[x] = z;
    return z;
  }
}

bool unit(int x, int y) {

  int xpar = find(x);
  int ypar = find(y);

  if (xpar == ypar) {
    return false;
  } // すでに結合済み
  group--;
  par[ypar] = xpar;
  treesize[xpar] += treesize[ypar];
  return true;
}

int main() {
  int N, M;
  cin >> N >> M;
  group = N;
  fx(N) {
    par[x + 1] = x + 1;
    treesize[x + 1] = 1;
  }
  fx(M) {
    int a, b;
    cin >> a >> b;
    unit(a, b);
  }

  int ans = 0;
  fx(N) {
    int k = treesize[find(x + 1)];
    ans = max(ans, k);
  }
  ce(ans) return 0;
}