代码:
#include <iostream>
#include <algorithm>
using namespace std;
int t, n, i[100005], j[100005], e[100005], a[200005], x[100005], xn;
int find(int aa) {
if (x[aa] == aa) return aa;
return x[aa] = find(x[aa]);
}
int main() {
cin >> t;
while (t--) {
cin >> n;
for (int ii = 0; ii < n; ++ii)
cin >> i[ii] >> j[ii] >> e[ii],
a[ii << 1] = i[ii], a[ii << 1 | 1] = j[ii];
sort(a, a + (n << 1));
xn = unique(a, a + (n << 1)) - a;
for (int xi = 0; xi < xn; ++xi) x[xi] = xi;
for (int ii = 0; ii < n; ++ii) if (e[ii])
x[find(lower_bound(a, a + xn, i[ii]) - a)] = x[find(lower_bound(a, a + xn, j[ii]) - a)];
for (int ii = 0; ii < n; ++ii) if (!e[ii])
if (find(lower_bound(a, a + xn, i[ii]) - a) == find(lower_bound(a, a + xn, j[ii]) - a))
goto NO;
cout << "YES\n";
continue;
NO:
cout << "NO\n";
}
}