题目描述
又到了一年一度的明明生日了,明明想要买 BB 样东西,巧的是,这 BB 样东西价格都是 AA 元。
但是,商店老板说最近有促销活动,也就是:
如果你买了第 II 样东西,再买第 JJ 样,那么就可以只花 K_{I,J}KI,J 元,更巧的是,K_{I,J}KI,J 竟然等于 K_{J,I}KJ,I。
现在明明想知道,他最少要花多少钱。
输入格式
第一行两个整数,A,BA,B。
接下来 BB 行,每行 BB 个数,第 II 行第 JJ 个为 K_{I,J}KI,J。
我们保证 K_{I,J}=K_{J,I}KI,J=KJ,I 并且 K_{I,I}=0KI,I=0。
特别的,如果 K_{I,J}=0KI,J=0,那么表示这两样东西之间不会导致优惠。
输出格式
一个整数,为最小要花的钱数。
分析为什么用Kruskal算法。
该题目中,有两顶点(两点之间不分顺序,即没有方向),且两顶点之间有数值(而且自己到自己数值为0),可以看做为无向图之间,数值为权值,需要求出最大的优惠价格类似于找出权值最小的通道的最小生成树。该类型模式可以用最小生成树Kruskal算法做。
先是生成一个无向图,为了得到最少的价钱,那么求出开始运用到最小生成树(先是将权值从小到大的排序一遍,将其一个个取出,判断是否形成环,如果不形成环,那就将权值进行相加。最终就会得到最小生成树,即得到最大的优惠价格)
但是注意到一个问题,优惠价格有可能大于原本的价钱,所以到最后输出价格的时候,与原来的价格进行对比再输出(细节)