并查集入门--知识点 畅通工程
来源:互联网 发布:合肥市行知学校在哪 编辑:程序博客网 时间:2024/06/06 05:28
2.并查集算法以及路径压缩
int pre[1000 ];int find(intx) //查找根节点{ int r=x; while ( pre[r ] != r) //返回根节点 r r=pre[r]; int i=x , j ; while( i != r) //路径压缩 { j = pre[ i ]; // 在改变上级之前用临时变量 j 记录下他的值 pr } return r ;}
将两点相连
void join(intx,inty) //判断x y是否连通, //如果已经连通,就不用管了 //如果不连通,就把它们所在的连通分支合并起,{ int fx=find(x),fy=find(y); if(fx!=fy) pre[fx ]=fy;//接通需要通过两个父节点进行连接 pre【fx】=fy; 意思是fx的父节点为fy}
代码:
//本程序的本质就是查询存在的连接数 通过总数减去存在的 得到的就是需要增加的最小连接数
#include<iostream>using namespace std;int n,m,a,b;int sum,pre[10000]; int find(int x){intr;r=x;while(pre[r]!=r){r=pre[r];}inti=x,j;while(i!=r){j=pre[i];//¼Ç¼ֵpre[i]=r;i=j;}returnr;} void join(int x,inty){intfx=find(x),fy=find(y);if(fx!=fy){pre[fx]=fy;sum--;}}int main(){while(cin>>n&&n){cin>>m;sum=n-1;for(inti=1;i<=n;i++)//³õʼ»¯Á¬½Óµãpre[i]=i;for(inti=1;i<=m;i++){cin>>a>>b;join(a,b);}cout<<sum<<endl;}return0;}
阅读全文
0 0
- 并查集入门--知识点 畅通工程
- hdu1232畅通工程(并查集入门)
- (并查集入门)畅通工程
- 并查集入门题畅通工程
- HDU1232 畅通工程 并查集入门
- 并查集 畅通工程
- 畅通工程(并查集)
- 畅通工程 并查集
- 畅通工程 并查集
- 畅通工程 ---- 并查集
- 畅通工程(并查集)
- 畅通工程-并查集
- 并查集-----畅通工程
- 并查集 畅通工程
- 畅通工程--并查集
- 并查集:畅通工程
- 并查集 - 畅通工程
- 畅通工程(并查集)
- java线程:Atomic(原子的)
- spring 中常用的两种事务配置方式以及事务的传播性、隔离级别
- Python学习记录——常用的IO操作及代替批处理命令
- hdoj 2089 不要62
- 取两张mysql表中分别两个字段相同的值
- 并查集入门--知识点 畅通工程
- spring Aop 配置异常问题
- 极性与非极性电容并联的作用
- windows storm 1.1.1启动失败解决
- MySQL集群搭建详解
- Spring容器中init Bean和destroy Bean的方式
- HDU 6152 Friend-Graph
- HDU6152 Friend-Graph(拉姆齐定理,2017中国大学生程序设计竞赛
- 文件查找之 模拟everything (一)