hdu 1232 并查集小试牛刀
来源:互联网 发布:js 为什么会跨域 编辑:程序博客网 时间:2024/05/30 23:03
今天第一次接触并查集这个神马东西,花了二个小时去搞懂一些基本的东西;
并查集思想:1.并查集是用来处理两个不相交集合的问题
2.以树为基础,组成一个森林,一棵树代表一个集合
3.判断两个元素是否在同一集合中,只要知道是否在同一棵树中,也就是是否具有相同的根结点;
4.压缩路径:在寻找根结点过程中
5.合并两个集合
下面是hdu1232的代码:
#include<iostream>#include<vector>using namespace std;int find_father(int x,vector<int>& father){if(x == father[x])return x;else{//回溯压缩路径father[x] = find_father(father[x],father);}return father[x];} void merge(int a,int b,vector<int>&father){father[a] = b;}int main(){vector<int> father;int nTown;int nWay;while(cin >>nTown && nTown){father.push_back(0);for(int i = 1;i <= nTown;i++){//初始化父结点为自己father.push_back(i);}cin >>nWay;for(int i = 0;i < nWay;i++){int a,b;int _a,_b;cin >>a >>b;_a = find_father(a,father);_b = find_father(b,father);if(_a != _b){//在不同的集合中,而现在得知两下城填之间有路,固两个集合中的每一个城镇都可通达,固合并为一个集合merge(_a,_b,father);}}int count = -1;for(int i = 1;i <= nTown;i++){//判断有多少个根结点,也就是有多少个集合,要使它们合并起来就要建n-1条路,这里count初始化为-1;if(i == father[i])count++;}cout <<count <<endl;father.clear();}}
- hdu 1232 并查集小试牛刀
- HDU 1232 并查集裸题
- hdu 1232 .hdu 1856 并查集 。。。
- HDU-1232 并查集
- hdu 1232 并查集
- HDU-1232(并查集)
- hdu 1232(并查集)
- hdu 1232 并查集
- HDU 1232 并查集
- hdu 1232 并查集
- hdu 1232(并查集)
- HDU 1232 并查集
- hdu 1232 并查集
- 并查集 hdu 1232
- HDU 1232(并査集)
- hdu 1232 并查集
- hdu 1232 并查集
- hdu 1232 并查集
- 数据库备份和恢复
- ToString大全
- Spring中的动态代理
- 谁能帮我看一下关于servlet问题?
- linux jdk环境配置
- hdu 1232 并查集小试牛刀
- 2011-7-30 16:54:26
- 置换 置换群 应用
- 论技术
- Spring整理11 -- 面对切面(AOP)1 -- 注解配置的方式实现AOP
- 10118 - Free Candies
- Git和Repo扫盲——如何取得Android源代码
- 【ORACLE】删除表数据的存储过程backup.sql
- Spring整理12 -- 面对切面(AOP)3 -- 使用CGLIB实现AOP