本题题意就是约翰成了村里的头头,然后他感觉很开森,就要把网共享给村名.但是拉网线甚么的是要成本的.然后题目给出一个矩阵,矩阵的某一个元素(i,j)就表示第i个村民到第j个村民那儿拉网线的成本,所以从样例就可以看出(i,j)是等于(j,i)的,然后(i,i)都是0,也就是自己到自己家不需要成本.
生成树的定义神马的百度百科里可以了解.大概就是一个图的子图如果满足连通性,也就是两两点之间都能连通,然后还没有环,它奏是棵树了,美其名曰生成树,其中边权和最小(对应实际问题中的总路程最短,费用最少等等)的生成树就叫最小生成树.求最小生成树有两种算法,其一是Prim算法,其二是Kruskal算法.我分别用两种方法做了一下.
对于图论问题,见图,算法解题,貌似都带一些模式化,比如prim算法用哪种存图方法会更方便操作等等,但是其中的思想在以后学到自己设计算法的份上时价值非凡..
这是Prim算法的代码:
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <climits> //INT_MAX
using namespace std;
const int MAX = 128;
const int INF = INT_MAX>>1;
int cost[MAX][MAX];//cost[u][v]表示边e=(u,v)的权值(不存在时为INF)
int mincost[MAX];//从集合X出发的边到每个顶点的最小权值
bo