模拟题【图论、分类讨论】魔法森林

这篇博客讲述了如何解决一道关于魔法森林的图论问题。亮亮想要构建一个魔法森林,使得森林中的村民、巫师和大魔法师都能互相访问。通过分析不同居民类型的情况,提出了最小化道路数量和魔法值的策略,包括建立最小生成树和构造特定形状的图。解决方案包括Prim和Kruskal算法的应用,以及针对不同居民数量的特殊情况讨论。
摘要由CSDN通过智能技术生成

魔法森林

【题目描述】

亮亮在梦中游历了魔法城堡后,对此心驰神往,于是用自己制造的法杖,创造了一片魔法森林。
这片森林中一开始有 n n n个节点,没有边相连,若想要在第 i i i个点和第 j j j个点之间建立一条双向通路,则需花费 C i j Cij Cij的魔法值。

每个结点上住着一个魔法居民,若两个节点间有边直接相连,则他们就成为了邻居。居民一共有三种类型:

①村民:他们只能通过道路拜访自己的邻居。

②巫师:他们可以拜访自己的邻居以及邻居的邻居。

③大魔法师:由于他们拥有法力,因此可以拜访所有与自己连通的人。

亮亮不希望有人孤单,因此他保证了每种类型的居民要么不出现,否则至少出现两个。同时,他又希望大家能建立良好的关系,所以他决定花费魔法值为魔法森林修路,使得任意居民都可以拜访其他所有的居民。

他想知道,最少需要建立多少条道路才能达成自己的心愿。在道路数目最少的前提下,花费的魔法值最小又是多少。

【输入格式】

第一行有一个整数 n n n

第二行有 n n n个整数,第 i i i个整数表示 i i i号节点所居住的居民的类型( 1 1 1表示村民, 2 2 2表示巫师, 3 3 3表示大魔法师)。

接下来 n n n行,每行 n n n个数,是一个 n ∗ n

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值