#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
class DSU {
public:
vector<int> size;
vector<int> parent;
DSU(int n) {
size.assign(n, 1);
parent.resize(n);
for (int i = 0; i < n; i++) parent[i] = i;
}
int findParent(int x) {
if (x == parent[x]) return x;
return parent[x] = findParent(parent[x]); // Path compression
}
void unionBySize(int x, int y) {
int rootX = findParent(x); // FIX: Must use findParent
int rootY = findParent(y);
if (rootX != rootY) {
if (size[rootX] < size[rootY]) swap(rootX, rootY);
parent[rootY] = rootX;
size[rootX] += size[rootY];
}
}
};
int maxWeightInGraph(int threshold, vector<vector<int>> edges, int n) {
// If threshold is 0 and we have more than 1 node, it's impossible
if (threshold < 1 && n > 1) return -1;
// 1. Sort edges by weight (Ascending)
sort(edges.begin(), edges.end(), [](const vector<int>& a, const vector<int>& b) {
return a[2] < b[2];
});
DSU dsu(n);
int maxW = -1;
// 2. Greedy merge (Kruskal's logic)
for (const auto& edge : edges) {
int u = edge[0];
int v = edge[1];
int w = edge[2];
// We unite the nodes. In the context of reachability to 0,
// we treat the connection as an undirected bridge.
dsu.unionBySize(u, v);
maxW = w;
// 3. Check if all nodes are now in the same component as Node 0
// findParent(0) will give the root of the component containing 0.
// If that component's size is N, everyone can reach 0.
if (dsu.size[dsu.findParent(0)] == n) {
return maxW;
}
}
return -1; // Not all nodes could be connected
}
int main() {
// Example 1
vector<vector<int>> edges1 = {{1,0,2},{2,1,3},{2,3,3}};
cout << "Example 1 (Expected 1): " << maxWeightInGraph(2, edges1, 4) << endl;
// Example 2
vector<vector<int>> edges2 = {{0,1,1},{0,2,2},{0,3,1},{0,4,1},{1,2,1},{1,4,1}};
cout << "Example 2 (Expected -1): " << maxWeightInGraph(1, edges2, 5) << endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8YWxnb3JpdGhtPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmNsYXNzIERTVSB7CnB1YmxpYzoKICAgIHZlY3RvcjxpbnQ+IHNpemU7CiAgICB2ZWN0b3I8aW50PiBwYXJlbnQ7CgogICAgRFNVKGludCBuKSB7CiAgICAgICAgc2l6ZS5hc3NpZ24obiwgMSk7CiAgICAgICAgcGFyZW50LnJlc2l6ZShuKTsKICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykgcGFyZW50W2ldID0gaTsKICAgIH0KCiAgICBpbnQgZmluZFBhcmVudChpbnQgeCkgewogICAgICAgIGlmICh4ID09IHBhcmVudFt4XSkgcmV0dXJuIHg7CiAgICAgICAgcmV0dXJuIHBhcmVudFt4XSA9IGZpbmRQYXJlbnQocGFyZW50W3hdKTsgLy8gUGF0aCBjb21wcmVzc2lvbgogICAgfQoKICAgIHZvaWQgdW5pb25CeVNpemUoaW50IHgsIGludCB5KSB7CiAgICAgICAgaW50IHJvb3RYID0gZmluZFBhcmVudCh4KTsgLy8gRklYOiBNdXN0IHVzZSBmaW5kUGFyZW50CiAgICAgICAgaW50IHJvb3RZID0gZmluZFBhcmVudCh5KTsKICAgICAgICBpZiAocm9vdFggIT0gcm9vdFkpIHsKICAgICAgICAgICAgaWYgKHNpemVbcm9vdFhdIDwgc2l6ZVtyb290WV0pIHN3YXAocm9vdFgsIHJvb3RZKTsKICAgICAgICAgICAgcGFyZW50W3Jvb3RZXSA9IHJvb3RYOwogICAgICAgICAgICBzaXplW3Jvb3RYXSArPSBzaXplW3Jvb3RZXTsKICAgICAgICB9CiAgICB9Cn07CgppbnQgbWF4V2VpZ2h0SW5HcmFwaChpbnQgdGhyZXNob2xkLCB2ZWN0b3I8dmVjdG9yPGludD4+IGVkZ2VzLCBpbnQgbikgewogICAgLy8gSWYgdGhyZXNob2xkIGlzIDAgYW5kIHdlIGhhdmUgbW9yZSB0aGFuIDEgbm9kZSwgaXQncyBpbXBvc3NpYmxlCiAgICBpZiAodGhyZXNob2xkIDwgMSAmJiBuID4gMSkgcmV0dXJuIC0xOwoKICAgIC8vIDEuIFNvcnQgZWRnZXMgYnkgd2VpZ2h0IChBc2NlbmRpbmcpCiAgICBzb3J0KGVkZ2VzLmJlZ2luKCksIGVkZ2VzLmVuZCgpLCBbXShjb25zdCB2ZWN0b3I8aW50PiYgYSwgY29uc3QgdmVjdG9yPGludD4mIGIpIHsKICAgICAgICByZXR1cm4gYVsyXSA8IGJbMl07CiAgICB9KTsKCiAgICBEU1UgZHN1KG4pOwogICAgaW50IG1heFcgPSAtMTsKCiAgICAvLyAyLiBHcmVlZHkgbWVyZ2UgKEtydXNrYWwncyBsb2dpYykKICAgIGZvciAoY29uc3QgYXV0byYgZWRnZSA6IGVkZ2VzKSB7CiAgICAgICAgaW50IHUgPSBlZGdlWzBdOwogICAgICAgIGludCB2ID0gZWRnZVsxXTsKICAgICAgICBpbnQgdyA9IGVkZ2VbMl07CgogICAgICAgIC8vIFdlIHVuaXRlIHRoZSBub2Rlcy4gSW4gdGhlIGNvbnRleHQgb2YgcmVhY2hhYmlsaXR5IHRvIDAsIAogICAgICAgIC8vIHdlIHRyZWF0IHRoZSBjb25uZWN0aW9uIGFzIGFuIHVuZGlyZWN0ZWQgYnJpZGdlLgogICAgICAgIGRzdS51bmlvbkJ5U2l6ZSh1LCB2KTsKICAgICAgICBtYXhXID0gdzsKCiAgICAgICAgLy8gMy4gQ2hlY2sgaWYgYWxsIG5vZGVzIGFyZSBub3cgaW4gdGhlIHNhbWUgY29tcG9uZW50IGFzIE5vZGUgMAogICAgICAgIC8vIGZpbmRQYXJlbnQoMCkgd2lsbCBnaXZlIHRoZSByb290IG9mIHRoZSBjb21wb25lbnQgY29udGFpbmluZyAwLgogICAgICAgIC8vIElmIHRoYXQgY29tcG9uZW50J3Mgc2l6ZSBpcyBOLCBldmVyeW9uZSBjYW4gcmVhY2ggMC4KICAgICAgICBpZiAoZHN1LnNpemVbZHN1LmZpbmRQYXJlbnQoMCldID09IG4pIHsKICAgICAgICAgICAgcmV0dXJuIG1heFc7CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiAtMTsgLy8gTm90IGFsbCBub2RlcyBjb3VsZCBiZSBjb25uZWN0ZWQKfQoKaW50IG1haW4oKSB7CiAgICAvLyBFeGFtcGxlIDEKICAgIHZlY3Rvcjx2ZWN0b3I8aW50Pj4gZWRnZXMxID0ge3sxLDAsMn0sezIsMSwzfSx7MiwzLDN9fTsKICAgIGNvdXQgPDwgIkV4YW1wbGUgMSAoRXhwZWN0ZWQgMSk6ICIgPDwgbWF4V2VpZ2h0SW5HcmFwaCgyLCBlZGdlczEsIDQpIDw8IGVuZGw7CgogICAgLy8gRXhhbXBsZSAyCiAgICB2ZWN0b3I8dmVjdG9yPGludD4+IGVkZ2VzMiA9IHt7MCwxLDF9LHswLDIsMn0sezAsMywxfSx7MCw0LDF9LHsxLDIsMX0sezEsNCwxfX07CiAgICBjb3V0IDw8ICJFeGFtcGxlIDIgKEV4cGVjdGVkIC0xKTogIiA8PCBtYXhXZWlnaHRJbkdyYXBoKDEsIGVkZ2VzMiwgNSkgPDwgZW5kbDsKCiAgICByZXR1cm4gMDsKfQ==