当前位置: 首页 > wzjs >正文

无锡建设企业网站实现网站开发

无锡建设企业网站,实现网站开发,如何营销,网站标签怎么做题目 给定一个包含 n 个点(编号为 1∼n)的无向图,初始时图中没有边。 现在要进行 m 个操作,操作共有三种: C a b,在点 a 和点 b 之间连一条边,a和 b 可能相等;Q1 a b,询问…

题目

给定一个包含 n 个点(编号为 1∼n)的无向图,初始时图中没有边。

现在要进行 m 个操作,操作共有三种:

C a b,在点 a 和点 b 之间连一条边,a和 b 可能相等;Q1 a b,询问点 a 和点 b 是否在同一个连通块中,a 和 b
可能相等; Q2 a,询问点 a 所在连通块中点的数量;

输入格式

第一行输入整数 n 和 m。

接下来 m 行,每行包含一个操作指令,指令为 C a b,Q1 a b 或 Q2 a 中的一种。

输出格式

对于每个询问指令 Q1 a b,如果 a 和 b 在同一个连通块中,则输出 Yes,否则输出 No。

对于每个询问指令 Q2 a,输出一个整数表示点 a 所在连通块中点的数量

每个结果占一行。

数据范围

1≤n,m≤105

输入样例:

5 5

C 1 2

Q1 1 2

Q2 1

C 2 5

Q2 5

输出样例:

Yes

2

3

来源:acwing算法基础837. 连通块中点的数量


思路(注意事项)


纯代码

#include<bits/stdc++.h>
using namespace std;const int N = 100010;
int p[N], si[N];int find(int x)
{if (p[x] != x) p[x] = find(p[x]);return p[x];
}
int main()
{int n, m;cin >> n >> m;for (int i = 1; i <= n; i++) {	p[i] = i;si[i] = 1;}while (m --){char c[2];int a, b;scanf("%s", c);if (c[0] == 'C') {	scanf("%d%d", &a, &b);if (find(a) == find(b)) continue;si[find(b)] += si[find(a)];p[find(a)] = find(b);}else if (c[1] == '1'){scanf("%d%d", &a, &b);if (find(a) == find(b)) cout << "Yes" << endl;else cout << "No" << endl;}else {scanf("%d", &a);cout << si[find(a)] << endl;}}return 0; 
}

题解(带注释)

#include<bits/stdc++.h>
using namespace std;const int N = 100010; // 定义最大节点数
int p[N]; // 并查集数组,p[i] 表示节点 i 的父节点
int si[N]; // 存储每个集合的大小,si[i] 表示以 i 为根节点的集合的大小// 查找函数,用于查找节点 x 的根节点,并进行路径压缩
int find(int x)
{// 如果 x 不是根节点,递归查找其父节点的根节点,并进行路径压缩if (p[x] != x) p[x] = find(p[x]);// 返回 x 的根节点return p[x];
}int main()
{int n, m; // n 表示节点数,m 表示操作数cin >> n >> m; // 输入节点数和操作数// 初始化并查集for (int i = 1; i <= n; i++) {	p[i] = i; // 每个节点的父节点初始化为自己si[i] = 1; // 每个集合的大小初始化为 1}// 处理每个操作while (m --){char c[2]; // 操作类型int a, b; // 操作涉及的两个节点scanf("%s", c); // 输入操作类型if (c[0] == 'C') // 如果是合并操作{	scanf("%d%d", &a, &b); // 输入要合并的两个节点if (find(a) == find(b)) continue; // 如果已经在同一个集合中,跳过si[find(b)] += si[find(a)]; // 将 a 所在集合的大小加到 b 所在集合的大小上p[find(a)] = find(b); // 将 a 所在集合的根节点的父节点设置为 b 所在集合的根节点}else if (c[1] == '1') // 如果是查询操作(查询两个节点是否在同一个集合中){scanf("%d%d", &a, &b); // 输入要查询的两个节点if (find(a) == find(b)) cout << "Yes" << endl; // 如果在同一个集合中,输出 Yeselse cout << "No" << endl; // 否则输出 No}else // 如果是查询操作(查询某个节点所在集合的大小){scanf("%d", &a); // 输入要查询的节点cout << si[find(a)] << endl; // 输出该节点所在集合的大小}}return 0; 
}
http://www.dtcms.com/wzjs/838363.html

相关文章:

  • 门户网站建设运营网站制作 优帮云
  • 优化营商环境心得体会网站优化要多少钱
  • 国外做的好的电商网站推荐校园网站平台建设
  • 微网站开发费用比较好约的网站设计
  • 迷你主机做网站服务器wordpress修改页面的title
  • 网站建设需要使用哪些设备互联网广告投放
  • 四川省住房城乡建设厅网站做网站准备材料
  • 互联网营销怎么赚钱wordpress百度收录优化
  • 建设治安总队网站目的网站开发明细
  • 网站后台怎么上传文章wordpress导购淘宝客模板
  • 给公司起名字大全免费优化资源配置
  • 做邮轮的网站建设企业银行网站
  • 网站建设制作首页流程哪些公司经常做网站
  • 佛山专业网站营销wordpress 小工具区
  • 做网站程序的步骤做雷达干扰的网站
  • 做网站页面深圳比较好的设计工作室
  • 海口 网站建设东莞技术好的网站建设推广
  • 哪个建站平台较好微营销软件免费下载
  • 泉州网站建设开发自适应门户网站模板
  • 网站制作优化济南微信公众号登录入口在哪
  • 企业网上年检在网站怎么做网站开发和设计人员的岗位要求
  • 西宁做网站公司排名用ps怎么做网站背景
  • 旅游网站建设的功能定位怎么做下载类的网站吗
  • 网站怎么优化百度信息流推广是什么意思
  • 房山企业网站建设公司张店免费做网站
  • 网站建设程序制作清华紫光做网站
  • 华艺网站建设线上推广销售渠道
  • 企业网站建设需要许可证吗建设厅网站上保存键看不见
  • 申请网站到哪里公司网站建设费用预算
  • wdcp设置网站安全直播传媒公司排名