本文整理汇总了C++中multiset::emplace方法的典型用法代码示例。如果您正苦于以下问题:C++ multiset::emplace方法的具体用法?C++ multiset::emplace怎么用?C++ multiset::emplace使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类multiset
的用法示例。
在下文中一共展示了multiset::emplace方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: main
int main() {
ios_base::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
cin >> n >> m;
for (int i = 0; i < n; ++i) {
cin >> a[i];
uf[i] = i;
ms.emplace(a[i], i);
}
for (int i = 0; i < m; ++i) {
int u, v;
ll w;
cin >> u >> v >> w;
--u; --v;
edges[i] = make_tuple(w, u, v);
}
sort(edges, edges + m);
ll ans = 0LL;
int cc = n;
int ptr = 0;
while (cc > 1) {
ll ax, ay;
int comp_a, comp_b;
// find the two minimum as
tie(ax, comp_a) = *ms.begin();
tie(ay, comp_b) = *next(ms.begin());
ll tot_comp = ax + ay;
while (ptr < m and get<0>(edges[ptr]) <= tot_comp) {
ll w;
int u, v;
tie(w, u, v) = edges[ptr];
if (merge(u, v)) {
--cc;
ans += w;
}
++ptr;
}
if (merge(comp_a, comp_b)) {
--cc;
ans += tot_comp;
}
}
cout << ans << '\n';
return 0;
}