最小生成树(Prim)
Prim模板
O(NlogN)
#include<bits/stdc++.h>
using namespace std;
#define init(array,x) memset(array,x,sizeof(array))
const int maxn = 1e5+99;
int n,m,ans,vis[maxn];
struct node{
int to,w;
bool operator < (const node tmp)const{
return tmp.w<w;
}
};
vector<node> d[maxn];
priority_queue<node>q;
void Prim(int x){
int tot=0;ans=0;
q.push({x,0});
while(tot<=n&&!q.empty()){
node t = q.top();
q.pop();
int tmp=t.to;
if(vis[tmp])continue;
vis[tmp]=1;
ans+=t.w;
tot++;
for(int i=0;i<d[tmp].size();i++){
int to=d[tmp][i].to,w=d[tmp][i].w;
if(!vis[to]){
q.push(d[tmp][i]);
}
}
}
}
int main(){
cin>>n>>m;
for(int i=1,a,b,w;i<=m;i++)cin>>a>>b>>w,d[a].push_back({b,w}),d[b].push_back({a,w});
Prim(1);
cout<<ans;
return 0;
}
本文来自博客园,作者:蒟蒻orz,转载请注明原文链接:https://www.cnblogs.com/orzz/p/18122206