Ok, so the logic for the find_parent was wrong. The find_parent should have been
int find_parent(DSU* dsu, int n)
{
if (n == dsu->parent[n].node) {
return n;
}
return dsu->parent[n].node = find_parent(dsu, dsu->parent[n].node);
}