刷清橙OJ--A1066.集合合并
来源:互联网 发布:php源代码下载 编辑:程序博客网 时间:2024/06/17 07:37
问题:
A1066. 集合合并
时间限制:1.0s 内存限制:512.0MB
总提交次数:1867 AC次数:549 平均分:40.62
问题描述
一开始有n个集合,{1},{2}……{n}。
定义一个操作,给定两个数a,b,用a,b所在的集合的并集代替a和b原来所在的集合。
求操作之后的集合个数。
输入格式
第一行是两个自然数n,m(其中m小于n,m和n小于3000),分别表示一开始的集合个数和操作的总数。
接下来m行,每行两个整数a,b,表示合并a,b所在集合。
输出格式
一个整数,即最后的集合个数。
样例输入
6 4
1 2
2 3
3 6
4 5
样例输出
2
代码:
#include <cstdio>using namespace std;int pre[100001];int find(int x) {//查找x的终极祖先int r = x;while (r != pre[r]) {r = pre[r];}return r;}int max(int a, int b) {return a>b ? a : b;}int min(int a, int b) {return a<b ? a : b;}void join(int x, int y) {//合并int fx = find(min(x, y));int fy = find(max(x, y));if (fx != fy)pre[fy] = fx;}int main() {int n, m, a, b, count, flg;while (scanf("%d%d", &n, &m) != EOF) {for (int i = 1;i <= n;i++) {pre[i] = i;}for (int j = 1;j <= m;j++) {scanf("%d%d", &a, &b);join(a, b);}count = 0;for (int k = 1;k <= n;k++) {if (pre[k] == k) {count++;}else {continue;}}printf("%d\n", count);}return 0;}
个人想法:代码来自试题讨论。
阅读全文
0 0
- 刷清橙OJ--A1066.集合合并
- OJ练习2 --- 合并集合
- PAT-A1066
- 刷清橙OJ--A1021.集合运算
- 集合合并
- 集合合并
- 集合合并
- PAT a1066题解
- OJ-----整数数组合并
- OJ-----字符串合并处理
- 石子合并-OJ
- 合并两个数据集合
- 合并两个集合 union
- Hdu1412set实现集合合并
- 集合的合并
- 集合的合并
- 两个集合的合并
- scala合并有序集合
- ionic开发——百度地图InfoWindow信息窗口上添加按钮,无法触发点击事件问题解决办法
- JQuery 给h和span标签赋值和取值
- Mysql开启慢查询
- Hamming Embedding 汉明嵌入简介
- 学Python的目的
- 刷清橙OJ--A1066.集合合并
- Mysql-之定时器调用存储过程(当用户超时未向服务端发送请求时更新用户状态为离线)
- node(url使用)
- Pycharm 2017 Active激活
- 链表面试题 进阶
- PL/SQL报错:Initialization error Oracle client not properly installed
- kali使用wpscan报错ruby: No such file or directory
- JS判断安卓、苹果设备
- 详解MySql的慢查询分析及开启慢查询日志