魔法森林
【题目描述】
亮亮在梦中游历了魔法城堡后,对此心驰神往,于是用自己制造的法杖,创造了一片魔法森林。
这片森林中一开始有 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