luogu-HXOI-U331150-密室逃脱2
426 字
2 分钟
luogu-HXOI-U331150-密室逃脱2
Algorithms: 图论 最小生成树
不要看题面花里胡哨的,实际上它意思已经很明确了,就是让你在若干个站点存放 能量补给用具,使得能量能够扩散到图内每个站点。说到这里应该有些同学觉得,那我存放一个 能量补给用具 不就行了吗,这应该都能联通到每个站点啊。
警告
那其实你就大错特错了!
因为它还是要考虑消耗的体力最小啊,那这怎么办……
这时候就需要用上我们的最小生成树了!其实这道题只需要多建一个 0号虚拟节点,与其他各个节点相连,就不用考虑每个站点的消耗了,然后再跑一遍 模板,就可以了。
#include <iostream>#include <algorithm>
using namespace std;
typedef long long ll;
struct Edge { int u, v, w;
bool operator < (const Edge &A) const { return w < A.w; }};
const int N = 2e3 + 5;const int M = N * (N - 1);
int n, m, fa[N];ll ans;struct Edge e[M];
inline void init() { for (int i = 1; i <= n; ++i) { fa[i] = i; }}
inline int find(const int &x) { return fa[x] == x ? x : fa[x] = find(fa[x]);}
int main() { ios::sync_with_stdio(false); cin.tie(nullptr), cout.tie(nullptr);
cin >> n; init(); for (int i = 1; i <= n; ++i) { int v; cin >> v; e[++m].u = 0; e[m].v = i; e[m].w = v; } for (int i = 1; i <= n; ++i) { for (int j = 1; j <= n; ++j) { int w; cin >> w; if (i != j) { e[++m].u = i; e[m].v = j; e[m].w = w; } } }
sort(e + 1, e + m + 1); for (int i = 1; i <= m; ++i) { int fu = find(e[i].u); int fv = find(e[i].v); if (fu != fv) { fa[fu] = fv; ans += e[i].w; } }
cout << ans;}支持与分享
如果这篇文章对你有帮助,欢迎分享给更多人或赞助支持!
luogu-HXOI-U331150-密室逃脱2
https://blog.hxrch.top/posts/luogu-hxoi-u331150-密室逃脱2/ 相关文章 智能推荐
1
luogu-HXOI U330374-密室逃脱
题解 洛谷-HXOI U330374-密室逃脱 Std | 题解
2
luogu-HXOI U332989-身高
题解 洛谷-HXOI U332989-身高 Std | 题解
3
oiClass-puji P2112-征兵
题解 oiClass-puji P2112-征兵 题解
4
oiClass-puji P1278-树和数tree
题解 oiClass-puji P1278-树和数tree 题解
5
平面几何 v.s. 其他方法——谁才是王者?
数学 本文作者分享了在高中科技节数学“说数学比赛”活动中遇到的五道有趣的平面几何题,围绕各题的官方解法(多为三角法或解析几何、向量法)与自己设计的纯平面几何解法展开详细讲解。文章通过具体题目实例,展示了动静互换、探照灯模型、反演变换、倍长中线及阿氏圆等多种平面几何思维技巧的应用。作者强调纯几何解法虽计算量小但思维含量丰富,鼓励读者通过多种视角切换提升解题能力。文章最后总结了平面几何的灵活多变和思维训练价值,并鼓励求知者换角度思考问题。
随机文章 随机推荐
Horean's Blog