题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1232

并查集入门题。最近在学并查集,它无非包括三个操作:make_set(x)、union_set(x, y)和find_set(x)。

make_set(x)的作用是使得每一个成员x自成一个只包含x的集合。

union_set(x, y)的作用是使x和y合并成为一个新的集合,确定x和y的连通性。

find_set(x)则是查找到x的祖先,这里用set[i]表示元素 i  的祖先,换句话说就是,包含x的集合(唯一)的代表,当然这个代表是集合中的某个成员。对于如何选择代表要具体问题具体分析,但是要注意,如果寻找某一动态集合的代表两次,且在两次之间不修改集合,那么两次得到的答案应该是相同的。

并查集主要是用于确定无向图中连通子图的个数。这条题目实质上就是找出非连通子图的个数,对应的结果就是最少还需要建设的道路数目。

 #include <iostream>
using namespace std; const int maxn = ; int set[maxn]; int find_set(int x)
{
int t = x;
while (x != set[x])
{
x = set[x];
}
int j;
while (t != x) // 路径压缩,其实这里不用也行,它是为了处理元素很多或整棵树变为一条链的情况的,可以减少时间复杂度
{
j = set[t];
set[t] = x;
t = j;
}
return x;
} void union_set(int x, int y)
{
x = find_set(x);
y = find_set(y);
if (x != y)
set[x] = y;
} int main()
{
int i, n, m, c1, c2;
while (scanf("%d%d", &n, &m) != EOF && n)
{
for (i = ; i <= n; i++) // make_set(x)
{
set[i] = i;
}
for (i = ; i < m; i++)
{
scanf("%d%d", &c1, &c2);
union_set(c1, c2); // 把c1和c2合并成一个集合,确定它们是连通的
}
int cnt = -;
for (i = ; i <= n; i++) // 注意:cnt是从-1开始的。每个集合都有一个“代表”。假设如果只有一个集合,那么是不再需要建设道路的,至少要有两个代表,才需要建设一条道路
{
if (set[i] == i) // 每得到一个集合的代表,就需要建设一条路,只有一个集合的不需要建设道路!
cnt++;
}
printf("%d\n", cnt);
}
return ;
}

hdu 1232 畅通工程 解题报告的更多相关文章

  1. 【九度OJ】题目1028:继续畅通工程 解题报告

    [九度OJ]题目1028:继续畅通工程 解题报告 标签(空格分隔): 九度OJ 原题地址:http://ac.jobdu.com/problem.php?pid=1028 题目描述: 省政府" ...

  2. 【九度OJ】题目1024:畅通工程 解题报告

    [九度OJ]题目1024:畅通工程 解题报告 标签(空格分隔): 九度OJ 原题地址:http://ac.jobdu.com/problem.php?pid=1024 题目描述: 省政府"畅 ...

  3. 【九度OJ】题目1017:还是畅通工程 解题报告

    [九度OJ]题目1017:还是畅通工程 解题报告 标签(空格分隔): 九度OJ 原题地址:http://ac.jobdu.com/problem.php?pid=1017 题目描述: 某省调查乡村交通 ...

  4. 【九度OJ】题目1012:畅通工程 解题报告

    [九度OJ]题目1012:畅通工程 解题报告 标签(空格分隔): 九度OJ 原题地址:http://ac.jobdu.com/problem.php?pid=1012 题目描述: 某省调查城镇交通状况 ...

  5. HDU 1232 畅通工程(道路连接)(裸并查集)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1232 畅通工程 Time Limit: 4000/2000 MS (Java/Others)     ...

  6. hdu 1232 畅通工程(并查集算法)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1232 畅通工程 Time Limit: 4000/2000 MS (Java/Others)    M ...

  7. 题解报告:hdu 1232 畅通工程(并查集)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1232 Problem Description 某省调查城镇交通状况,得到现有城镇道路统计表,表中列出了 ...

  8. HDU 1232 畅通工程(模板——并查集)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1232 Problem Description 某省调查城镇交通状况,得到现有城镇道路统计表,表中列出 ...

  9. HDU 1232(畅通工程)题解

    以防万一,题目原文和链接均附在文末.那么先是题目分析: [一句话题意] 给定一具有N个节点的图和其边集,求其集合数量. [题目分析] 并查集经典题...其实就是创建好并查集就行了.. [算法流程] 于 ...

随机推荐

  1. Android中实现自定义的拍照应用

    可以参考:http://www.android-doc.com/guide/topics/media/camera.html 一.添加相应的权限 <uses-permission android ...

  2. hive 使用笔记(partition; HDFS乱码)

    6.  insert 语句 1) 因为目标表有partition, 所以刚开始我使用的语句是 insert overwrite table sa_r_item_sales_day_week_month ...

  3. Session解析

    1.除非关闭所有页面 或者超时session才销毁 2.在几个页面之间切换的时候 session保存用户状态. 3.遍历数组时候for循环中从0开始小于长度,不等于长度,用Matlab用习惯了,竟然从 ...

  4. 【poj2226】 Muddy Fields

    http://poj.org/problem?id=2226 (题目链接) 题意 给出一个只包含‘.’和‘*’的矩阵,用任意长度的宽为1的木板覆盖所有的‘*’而不覆盖‘.’,木板必须跟矩形的长或宽平行 ...

  5. hihocoder 1169 猜数字

    传送门 时间限制:10000ms 单点时限:5000ms 内存限制:256MB 描述 你正在和小冰玩一个猜数字的游戏.小冰首先生成一个长为N的整数序列A1, A2, …, AN.在每一轮游戏中,小冰会 ...

  6. android.net.wifi的简单使用方法

    获取Wifi的控制类WifiManager.  WifiManager  wm=(WifiManager)getSystemService(Context.WIFI_SERVICE); 接下来可以对w ...

  7. memcache内存分配机制

    memcached的内存分配没有用到c语言中自带的malloc函数,因为这个函数分配内存的时候效率很低,对于这种要求快速响应,对效率要求非常高的缓存软件来说非常不合适. memcached用的是自己的 ...

  8. QQ Auto Login Visual Basic Script

    QQ_Auto_Login.vbs: Dim QQPath QQPath="C:\Program Files (x86)\Tencent\QQ\Bin\QQ.exe" Set ba ...

  9. JavaScript 参数传递与变量复制

            ECMAScript 变量可能包含两种不同数据类型的值:基本类型值和引用类型值. 基本类型值指的是简单的数据段,而引用类型值指那些可能由多个值构成的对象.         5 种基本数 ...

  10. php 开启curl,重启php-fpm服务

    1,找到php.ini配置 find / -name 'php.ini' /usr/local/php/etc/php.ini 找到extension=php_curl.dll 把前面的分号去掉即可. ...