this is my code, can you please let me know where is the issue in my code.
#include <iostream>
#define MAXX 1000001
using namespace std;
struct node {
int id, rank;
int color;
node* parant;
};
node arr[MAXX];
node* find(node* x) {
if (x->parant == x)
{
return x;
}
x->parant = find(x->parant);
return x->parant;
}
int inpt[MAXX][2];
int N, Q, inptpoi;
int main() {
int test;
cin >> test;
int ans;
for (int t = 0; t < test; t++)
{
inptpoi = -1;
ans = 1;
cin >> N >> Q;
for (int i = 0; i <= N; i++)
{
arr[i].id = i;
arr[i].parant = &arr[i];
arr[i].color = -1;
arr[i].rank = 1;
}
for (int i = 0; i < Q; i++)
{
int x, y, val;
cin >> x >> y >> val;
if (val == 1)
{
inpt[++inptpoi][0] = x;
inpt[inptpoi][1] = y;
continue;
}
node *tempx = find(&arr[x]);
node *tempy = find(&arr[y]);
if (tempx != tempy)
{
if (tempx->rank > tempy->rank)
{
tempy->parant = tempx;
tempx->rank += tempy->rank;
}
else {
tempx->parant = tempy;
tempy->rank += tempx->rank;
}
}
}
while (inptpoi >= 0)
{
int x, y;
x = inpt[inptpoi][0];
y = inpt[inptpoi--][1];
node *tempx = find(&arr[x]);
node *tempy = find(&arr[y]);
if (tempx == tempy)
{
ans = 0;
break;
}
else {
if (tempx->color == -1)
{
tempx->color = tempy->color != 2 ? 2 : 1;
tempy->color = tempx->color == 1 ? 2 : 1;
}
else {
if (tempx->color == tempy->color)
{
ans = 0;
break;
}
tempy->color = tempx->color == 1 ? 2 : 1;
}
}
}
ans == 1 ? (cout << "yes" << endl) : (cout << "no" << endl);
}
return 0;
}