并查集+最小生成树_HDU_1102
来源:互联网 发布:网络装备交易排行榜 编辑:程序博客网 时间:2024/05/17 03:20
水一发
#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>const int maxn = 105;using namespace std;struct node{ int u,v,val;};int cmp(node a, node b){ return a.val < b.val;}node e[maxn*maxn];int n,par[maxn],rot[maxn];void Init(){ for(int i = 0; i < maxn; i++) { par[i] = i; rot[i] = 0; }}int Find(int x){ if(x == par[x]) return x; par[x] = Find(par[x]); return par[x];}int Union(int x, int y){ x = Find(x); y = Find(y); if(x == y)return 0; if(rot[x] > rot[y]) { par[y] = x; } else { par[x] = y; rot[y]++; } return 1;}int main(){ int t,x,q,u,v; while(scanf("%d",&n) != EOF) { t = 0; Init(); for(int i = 1; i <= n; i++) { for(int j = 1; j <= n; j++) { scanf("%d",&x); if(i > j) { e[t].u = i; e[t].v = j; e[t++].val = x; } } } scanf("%d",&q); while(q--) { scanf("%d%d",&u,&v); Union(u,v); } sort(e,e+t,cmp); int ans = 0; for(int i = 0; i < t; i++) { //printf("%d %d %d\n",e[i].u,e[i].v,e[i].val); if(Union(e[i].u, e[i].v)) ans+=e[i].val; } printf("%d\n",ans); } return 0;}
0 0
- 并查集+最小生成树_HDU_1102
- 并查集与最小生成树
- 并查集模版&最小生成树
- 最小生成树kruscal+并查集
- bzoj1050(最小生成树 并查集)
- 最小生成树与并查集
- 最小生成树与并查集
- 最小生成树+并查集+ kruskal
- 并查集 最小生成树
- 最小生成树(并查集)
- 最小生成树+并查集模板
- 最小生成树&并查集练习
- 并查集/最小生成树
- 并查集 +最小生成树
- 最小生成树模板 并查集
- 最小生成树(并查集)
- 1.1 并查集 & 最小生成树
- 并查集(最小生成树)
- 解析XML文件的几种方式及其比较
- suse11如何配置rsh
- [boost][2015-04-23] boost linux下的安装 编译 使用
- decorators.xml学习
- 你真的了解:IIS连接数、IIS并发连接数、IIS最大并发工作线程数、应用程序池的队列长度、应用程序池的...
- 并查集+最小生成树_HDU_1102
- 什么是NP问题,NP-complete和NP-hard问题.
- python+reportlab实战:生成一个带表格图片的PDF
- linux下文件夹的创建、复制、剪切、重命名、清空和删除
- java中的clone()方法的研究---(3)如何编写正确的clone()方法:基本数据类型
- EditText在不同场景下调用软键盘
- VTK中创建圆柱体
- sys和system 用户、sysdba和sysoper系统权限、sysdba和dba角色的区别
- C++类的成员函数、非成员函数和友元函数