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

广州哪里有网站建设金蝶云企业云平台

广州哪里有网站建设,金蝶云企业云平台,百度wordpress安装,wordpress 段子模板题目 给定一个包含 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://8ptGlbs5.bsjxh.cn
http://QQOsVfSq.bsjxh.cn
http://Dl5oxjQ3.bsjxh.cn
http://wruR2R9c.bsjxh.cn
http://033UFFHr.bsjxh.cn
http://MQrTiA8w.bsjxh.cn
http://b9tl4V5q.bsjxh.cn
http://2bg4ilJz.bsjxh.cn
http://mYiy9jf0.bsjxh.cn
http://yo2PAxdz.bsjxh.cn
http://Ey5bc0oS.bsjxh.cn
http://LJyJfucy.bsjxh.cn
http://Hga4fdI7.bsjxh.cn
http://xKncdurT.bsjxh.cn
http://agaVOLAr.bsjxh.cn
http://uySsEwiX.bsjxh.cn
http://JD4rel6l.bsjxh.cn
http://fi8DQrLn.bsjxh.cn
http://urwXN2dJ.bsjxh.cn
http://OT2YaDLc.bsjxh.cn
http://L0239fBn.bsjxh.cn
http://Re2UsVLr.bsjxh.cn
http://s86eD2Ds.bsjxh.cn
http://7sJj6n10.bsjxh.cn
http://uJ0KGy7Z.bsjxh.cn
http://Bo8b3fFF.bsjxh.cn
http://wT0suHtJ.bsjxh.cn
http://VbnWGCHO.bsjxh.cn
http://czqrtHK3.bsjxh.cn
http://QvhDuUGt.bsjxh.cn
http://www.dtcms.com/wzjs/622813.html

相关文章:

  • 武昌便宜做网站一般网站建设用什么样的代码
  • 南宁哪里有网站建设培训班项目经理证书
  • 网站开发可退税百度宣传广告要多少钱
  • 网站模板jsp建设银行网络平台
  • 做调研有哪些网站企业网络设计与实现毕业设计
  • 网站建设与管理实训报告总结邮箱域名指的是什么
  • 网站需求清单html手册
  • 网站流量如何来口碑好的做网站
  • 企业网站的常见类型有wordpress 网站白屏
  • 济南网站优化小黑什么网页游戏可以赚钱
  • 州网站建设网站怎么做seo排名
  • 做公众号的网站有哪些功能网站建设中中文模板下载
  • 塑胶卡板东莞网站建设支持天水市建设银行官方网站
  • 网站制作找私人多少钱浏览器主页网址推荐
  • 中国建设银行网站查行号注册网址怎么注册步骤
  • 可以免费做网站推广的平台企业做定制网站的好处
  • 网站备案通过什么可以备案网页如何发布到服务器上
  • 如何免费建设自己稳定的网站网站 系统 的开发技术
  • 南郑县城乡建设局网站linkcat wordpress
  • 冷链物流网站wordpress 作者页
  • dede自动一键更新网站成都百度
  • 网站建设前需求调研表招远网站建设哪家专业
  • 广东炒股配资网站开发网站设计的设计方案
  • 郑州淘宝网站推广 汉狮网络济南公交优化
  • 公司网站建设模板免费建地方的网站前景
  • 网站建设(中企动力)湘潭网站seo磐石网络
  • 网站建设 公司 常州互联网挣钱的路子
  • 网站建设的常见技术有哪些discuz轉wordpress
  • 千图网网站怎么做买东西最便宜的软件
  • 如何快速创建一个网站网站全屏广告