最小生成树模板
来源:互联网 发布:郑州软件开发工资 编辑:程序博客网 时间:2024/06/07 21:00
稀疏图:kruskal
#include<bits/stdc++.h>#define maxn 300001using namespace std;template <typename T> void read(T &x){x=0;int f=1;char ch=getchar();for(;!isdigit(ch);ch=getchar())if(ch=='-')f=-1;for(;isdigit(ch);ch=getchar())x=(x<<1)+(x<<3)+ch-'0';x*=f;}struct Edges{int u,v,w;}edges[maxn];int n,m,ans,tot;int fa[maxn],num[maxn];void init(){for(int i=1;i<=n;++i){fa[i]=i;num[i]=0;}}inline bool cmp(const Edges&a,const Edges&b){return a.w<b.w;}int getfa(int x){if(fa[x]==x) return x;else return fa[x]=getfa(fa[x]);}bool samefa(int x,int y){return getfa(x)==getfa(y);}void uniont(int x,int y){fa[y]=x;num[x]+=num[y];}void merge(int x,int y){int fx=getfa(x),fy=getfa(y);if(num[fx]>num[fy]) uniont(fx,fy);else uniont(fy,fx);}int main(){read(n),read(m);init();for(int i=1;i<=m;++i){read(edges[i].u);read(edges[i].v);read(edges[i].w);}sort(edges+1,edges+m+1,cmp);for(int i=1;i<=m;++i){if(samefa(edges[i].u,edges[i].v)) continue;ans+=edges[i].w;++tot;if(tot==n-1) break;merge(edges[i].u,edges[i].v);}cout<<ans<<endl; return 0;}
稠密图:prim
#include<bits/stdc++.h>#define maxn 10001#define maxm 300001#define inf 1e9using namespace std;template <typename T> void read(T &x){x=0;int f=1;char ch=getchar();for(;!isdigit(ch);ch=getchar())if(ch=='-')f=-1;for(;isdigit(ch);ch=getchar())x=(x<<1)+(x<<3)+ch-'0';x*=f;}int head[maxn],dis[maxn];int nxt[maxm],to[maxm],wei[maxm];int total,n,m,ans;bool vis[maxn];void add(int u,int v,int w){++total;to[total]=v;wei[total]=w;nxt[total]=head[u];head[u]=total;}void prim(){memset(vis,0,sizeof(vis));for(int i=1;i<=n;++i) dis[i]=inf;dis[1]=0;for(int ti=1;ti<=n;++ti){int jd=-1;for(int i=1;i<=n;++i)if(!vis[i]&&(jd==-1||dis[i]<dis[jd])) jd=i;vis[jd]=1;for(int e=head[jd];e;e=nxt[e]){if(!vis[to[e]]&&dis[to[e]]>wei[e]) dis[to[e]]=wei[e];}}}int main(){read(n),read(m);for(int i=1;i<=m;++i){int u,v,w;read(u),read(v),read(w);add(u,v,w);add(v,u,w);}prim();for(int i=1;i<=n;++i) ans+=dis[i];cout<<ans<<endl; return 0;}
因为main函数里面没有运行prim()
全部输出了0
懵了很久
一开始做prim时千万不要写vis[1]=1!
阅读全文
0 0
- 最小生成树模板
- 最小生成树模板
- 最小生成树---模板
- 最小生成树模板
- 最小生成树 模板
- 最小生成树(模板)
- 最小生成树模板
- 最小生成树模板
- 最小生成树模板
- 最小生成树【模板】
- 最小生成树【模板】
- 最小生成树模板
- 最小生成树模板
- 最小生成树 模板
- 最小生成树模板.
- 最小生成树模板
- 【模板】最小生成树
- 最小生成树模板
- 欢迎使用CSDN-markdown编辑器
- (1)jsp执行过程、语法
- flask 笔记
- 分词算法模型学习笔记(二)——MEMM
- js中null 和undefined 和空串的区别
- 最小生成树模板
- lnmp架构(linux nginx mysql php)搭建
- IO的最基本操作:字符流文件的读写
- HDU 4009 Transfer water(最小树形图)
- Golang语言快速上手到综合实战(Go语言、Beego框架、高并发聊天室、豆瓣电影爬虫) 下载
- Robot Framework自动化测试(三)---Selenium API
- JDK多版本冲突解决方案
- codevs1078 最小生成树
- excel操作技巧,干货分享,第一个99%的人都没有使用过!