第1行:2个数N,M中间用空格分隔,N为点的数量,M为边的数量。(2 <= N <= 1000, 1 <= M <= 50000) 第2 - M + 1行:每行3个数S E W,分别表示M条边的2个顶点及权值。(1 <= S, E <= N,1 <= W <= 10000)Output
输出最小生成树的所有边的权值之和。Input 示例
9 14 1 2 4 2 3 8 3 4 7 4 5 9 5 6 10 6 7 2 7 8 1 8 9 7 2 8 11 3 9 2 7 9 6 3 6 4 4 6 14 1 8 8Output 示例
37
最小生成树问题,prim算法
#include#include #include using namespace std; #define MAX 1005 #define INF 0x7fffffff int N,M,S,E,W; vector > val(MAX,vector (MAX,INF)); long long prim(){ long long res=0; vector vis(MAX,false); vector min(MAX,INF); min[1]=0; for(int i=1;i<=N;i++){ int j,k; for(k=-1,j=1;j<=N;j++) if(!vis[j]&&(k==-1||min[j] >N>>M; for(int i=0;i >S>>E>>W; val[S][E]=val[E][S]=W; } cout<