fork download
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. typedef long long ll;
  6. typedef pair<int, int> ii;
  7.  
  8. const ll LINF = 1e18;
  9. const int INF = 1e9;
  10.  
  11. const int N = 2e5 + 5;
  12.  
  13. struct Edge {
  14. int u, v, w;
  15. };
  16.  
  17. int n, m;
  18. vector<Edge> edges;
  19.  
  20. void init() {
  21. edges.clear();
  22. }
  23.  
  24. struct dsu {
  25. int n;
  26. vector<int> p, sz;
  27.  
  28. dsu(int n): n(n) {
  29. p.resize(n);
  30. sz.resize(n);
  31. for (int u = 0; u < n; u++) {
  32. p[u] = u;
  33. sz[u] = 1;
  34. }
  35. }
  36.  
  37. int findSet(int u) {
  38. if (p[u] == u) return u;
  39. return p[u] = findSet(p[u]);
  40. }
  41.  
  42. bool unionSet(int u, int v) {
  43. u = findSet(u),
  44. v = findSet(v);
  45. if (u == v) return false;
  46. if (sz[u] < sz[v]) swap(u, v);
  47. p[v] = u;
  48. sz[u] += sz[v];
  49. return true;
  50. }
  51. };
  52.  
  53. void solve() {
  54. cin >> n >> m;
  55.  
  56. init();
  57.  
  58. for (int i = 0; i < m; i++) {
  59. int u, v, w;
  60. cin >> u >> v >> w;
  61. edges.push_back({u, v, w});
  62. }
  63.  
  64. // Ban đầu cho tất cả các bit của đáp án (ans) bật
  65. // Một cách duyệt quen thuộc ở những bài liên quan đến bitmask
  66. // Ta sẽ duyệt từ bit lớn nhất về bit nhỏ nhất
  67. // Khi duyệt đến bit thứ i, ta sẽ kiểm tra xem có tắt được bit thứ i hay không
  68. // Nếu được thì tắt ngay bit thứ i, vì sẽ luôn cho ra phương án tối ưu nhất (nhỏ nhất)
  69. int ans = (1 << 30) - 1;
  70. for (int i = 29; i >= 0; i--) {
  71. ans ^= (1 << i);
  72.  
  73. dsu DSU(n + 1);
  74. int num_cc = n;
  75. for (Edge e : edges) {
  76. if ((ans & e.w) == e.w) num_cc -= DSU.unionSet(e.u, e.v);
  77. }
  78.  
  79. if (num_cc > 1) ans |= (1 << i); // không tắt được
  80. }
  81.  
  82. cout << ans << '\n';
  83. }
  84.  
  85. signed main() {
  86. ios::sync_with_stdio(false);
  87. cin.tie(nullptr);
  88. int tt;
  89. cin >> tt;
  90. while (tt--) {
  91. solve();
  92. }
  93. }
  94.  
Success #stdin #stdout 0.01s 5280KB
stdin
3


3 3
1 2 1
2 3 2
1 3 2


5 7
4 2 7
2 5 8
3 4 2
3 2 1
2 4 2
4 1 2
1 2 2


3 4
1 2 1
2 3 2
1 3 3
3 1 4
stdout
2
10
3