Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 461961a

Browse files
Update 3600.Maximize-Spanning-Tree-Stability-with-Upgrades.cpp
1 parent da08f58 commit 461961a

File tree

1 file changed

+22
-27
lines changed

1 file changed

+22
-27
lines changed

‎Union_Find/3600.Maximize-Spanning-Tree-Stability-with-Upgrades/3600.Maximize-Spanning-Tree-Stability-with-Upgrades.cpp‎

Lines changed: 22 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -17,64 +17,59 @@ class Solution {
1717
return true;
1818
}
1919
};
20-
20+
2121
bool isOK(int T, int n, vector<vector<int>>& edges, int k) {
2222
DSU dsu(n);
2323
int count = 0;
2424
int upgrade = 0;
25-
26-
vector<vector<int>>arr; // cost, u,v
25+
26+
vector<vector<int>>candidates; // upgrade, u,v
2727
for (auto& e: edges) {
2828
int u = e[0], v = e[1], s = e[2], must = e[3];
2929
if (must) {
3030
if (s<T) return false;
3131
dsu.unite(u,v);
32-
++count;
32+
count++;
3333
} else {
34-
if (s >= T)
35-
arr.push_back({0, u, v});
34+
if (s>=T)
35+
candidates.push_back({0, u, v});
3636
else if (2*s>=T)
37-
arr.push_back({1, u, v});
37+
candidates.push_back({1, u, v});
3838
}
3939
}
4040

41-
sort(arr.begin(), arr.end());
41+
sort(candidates.begin(), candidates.end());
4242

43-
for (auto& p: arr) {
44-
int u = p[1], v = p[2];
43+
for (auto& cand: candidates) {
44+
int u = cand[1], v = cand[2];
4545
if (count==n-1) break;
4646
if (dsu.find(u)!=dsu.find(v)) {
4747
dsu.unite(u,v);
4848
count++;
49-
upgrade += p[0];
50-
if (upgrade > k)
51-
return false;
49+
upgrade += cand[0];
50+
if (upgrade > k) return false;
5251
}
5352
}
5453

5554
for (int i=0; i<n; i++)
5655
if (dsu.find(i)!=dsu.find(0))
5756
return false;
5857

59-
return count == n-1;
58+
return count==n-1;
6059
}
61-
60+
6261
int maxStability(int n, vector<vector<int>>& edges, int k) {
63-
int lo = 0, hi = 0;
64-
for (auto &e:edges) {
65-
hi = max(hi, e[2]);
66-
}
67-
hi*=2;
68-
69-
while (lo<hi) {
62+
int lo = 1, hi = 1e5*2;
63+
while (lo < hi) {
7064
int mid = hi-(hi-lo)/2;
71-
if (isOK(mid, n, edges, k)) {
65+
if (isOK(mid, n, edges, k))
7266
lo = mid;
73-
} else {
67+
else
7468
hi = mid-1;
75-
}
7669
}
77-
if (isOK(lo, n, edges, k)) return lo;
78-
else return -1;
70+
if (isOK(lo, n, edges, k))
71+
return lo;
72+
else
73+
return -1;
7974
}
8075
};

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /