codevs1078 最小生成树
来源:互联网 发布:郑州软件开发工资 编辑:程序博客网 时间:2024/06/15 09:56
最小生成树裸题
#include<bits/stdc++.h>#define maxn 10005using 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,fa[maxn],num[maxn];inline bool cmp(const Edges&a,const Edges&b){return a.w<b.w;}inline void init(){for(int i=1;i<=m;++i){fa[i]=i;num[i]=0;}}int getfa(int x){if(x==fa[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);int cnt=0;for(int i=1;i<=n;++i)for(int j=1;j<=n;++j){int x;read(x);if(j>i){edges[++cnt].u=i;edges[cnt].v=j;edges[cnt].w=x;}}m=cnt;init();sort(edges+1,edges+m+1,cmp);int ans=0,tot=0;for(int i=1;i<=cnt;++i){if(samefa(edges[i].u,edges[i].v)) continue;else{ans+=edges[i].w;++tot;merge(edges[i].u,edges[i].v);if(tot==n-1) break;}}cout<<ans<<endl; return 0;}
阅读全文
0 0
- codevs1078 最小生成树
- Codevs1078 最小生成树( kruskal )
- 【codevs1078】最小生成树,prim算法
- 【Codevs1078】最小生成树 Prim算法(5/1000)
- 最小比例 最小生成树
- 最小生成树&&次最小生成树
- 最小生成生成树计数
- 树+最小生成树
- 最小生成树
- 最小生成树 MST
- 最小生成树Kruskal
- kruskal 最小生成树
- 最小生成树
- 最小生成树
- 最小生成树
- 最小生成树
- 最小生成树 MST
- 最小生成树问题
- IO的最基本操作:字符流文件的读写
- HDU 4009 Transfer water(最小树形图)
- Golang语言快速上手到综合实战(Go语言、Beego框架、高并发聊天室、豆瓣电影爬虫) 下载
- Robot Framework自动化测试(三)---Selenium API
- JDK多版本冲突解决方案
- codevs1078 最小生成树
- excel操作技巧,干货分享,第一个99%的人都没有使用过!
- PHP SplObjectStorage使用实例
- POJ1753 枚举
- easyUi—datagrid新增行保存不触发onAfterEdit事件
- MyBits 如何使用 databaseIdProvider
- 【转】计算几何题目推荐
- Java中this和super的用法总结
- Spring源码解析-springmvc