存个模板!!
prim:用小根堆优化的时间复杂度是(V + E)logV,时间复杂度跟dijkstra一样,因为实现思路基本一样。
该算法巧妙的利用了,最小生成树的切分性质:给定任意切分,横切边最小的边必然属于最小生成树(横切边是指一个端点在最小生成树中,另一个不在)。
update:其实感觉没太必要,这个时间复杂度直接kruskal就好了,不需要堆优化的最小生成树。
朴素prime:复杂度o(n*n)
#include <bits/stdc++.h>
#define ll long long
#define pi pair<int,int>
#define mk make_pair
#define pb push_back
using namespace std;
const int maxn = 5005;
int a[maxn][maxn], d[maxn], vis[maxn], n;
void primes()
{
memset(vis, 0, sizeof(vis));
memset(d, 0x3f, sizeof(d));
d[1] = 0;
for(int i = 1; i < n; i++)
{
int x = 0;
for(int j = 1; j <=