- CF1624G 没有讨论区qwq
- 悬关
#include <bits/stdc++.h>
#define x first
#define y second
#define pii pair <int, int>
using namespace std;
const int N = 2e5 + 10;
int t, n, m, a, b, c, ans;
int p[N];
struct node{
int x, y, z;
bool vis;
};
vector <node> V;
int find(int x) {
if (p[x] != x) p[x] = find(p[x]);
return p[x];
}
int main() {
scanf("%d", &t);
while(t--) {
ans = 0;
scanf("%d%d", &n, &m);
V.resize(m);
for (node &i : V) {
scanf("%d%d%d", &i.x, &i.y, &i.z);
i.vis = true;
}
for (int i = 30; i >= 0; i--) {
int k = 1 << i, q;
bool ok = true;
for (int i = 1; i <= n; i++) p[i] = i;
for (node i : V) {
if(!i.vis) continue;
if(i.z & k == 0) p[find(i.x)] = find(i.y);
}
q = find(1);
for (int i = 1; i <= n; i++) {
if(q != find(i)){
ok = false;
break;
}
}
if(ok) {
for (node &i : V) {
if(i.z & k) i.vis = 0;
}
} else {
ans += k;
}
}
printf("%d\n", ans);
}
}