GDUTacmtrain-3.A
2024-04-23 12:41:30
并查集
题意:
给出点数n,和操作数m;
每个操作给三个数字,op,u,v;
op=1,连接u,v
op=2,检查u,v是否连通
分析:
一道并查集模板题,首先知道什么是并查集,并查集是一个集合,支持合并与查询的功能;
并查集的建立:设立一个pre数组,令每一个元素的父亲为自己,pre[i]=i;
然后每当读入相连a,b,两点,只要两点不相等,我们随意让其中一个点成为另一个点的父亲;
每当读取a,b的连通性,我们可以查询a,b的父亲是否相等,如果不等,就查询父亲的父亲是否相等,同时,我们还可以做一个优化,即当a查询到它的爷爷时,将其并到它父亲的位置,这样下一次查询可以更快速.
代码:
#include <iostream>
#include <cstdio>
using namespace std;
const int maxn = 4000005;
const long long mod = 998244353;
int par[maxn];
long long ans1;int query(int u)
{if (par[u] == u)return u;return par[u] = query(par[u]);
}void add(int u, int v)
{int a = query(u);int b = query(v);if (a != b)par[a] = b;
}int main()
{int n, m;scanf("%d %d", &n, &m);int op, u, v;for (int i = 1; i <= n; i++)par[i] = i;while (m--){scanf("%d %d %d", &op, &u, &v);if (op == 0){add(u, v);}else if (op == 1){if (query(v) == query(u)){ans1 *= 2;ans1++;ans1 %= mod;}else{ans1 *= 2;ans1 %= mod;}}}printf("%lld", ans1);
}
最新文章
- Java web 环境搭建-Linux
- ubuntu16.04+cuda7.5
- UE4学习-程序崩溃,如何恢复工程
- 创建自己的共用js库
- mappedbytebuffer_Java NIO Buffer【MappedByteBuffer】概述与FileChannel的联系
- sql联接查询_SQL联接
- Java-Runoob-高级教程-实例-字符串:14. Java 实例 - 连接字符串
- Mysql删除数据报外键约束解决方法
- java高级能力_java高级技术工程师该具备哪些能力?
- 如何正确使用条码标签打印软件
- 微信计数器微信加粉计数器开发
- 怎样限制Word文档被复制粘贴?word限制编辑的使用技巧
- 【Android TV 开发】-->一些优秀 TV 开发相关框架 文章
- WARN: Establishing SSL connection without server‘s identity verification is not recommended. Acco...
- vue2.5版本源代码编译报 Could not load ..\vue\src\core/config 错误的问题 npm run dev 编译报错...
- c 语言count函数什么意思,在C ++ STL中设置count()函数
- 超市进销存之openGauss数据库的应用与实践
- java前端页面调用webservice_一个简单的Webservice的demo(中)_前端页面调用
- j3455安装linux 4k驱动,J3455安装centos步骤
- SEO知识(总结土著游民)(1)