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

爱站网seo工具坑梓网站建设市场

爱站网seo工具,坑梓网站建设市场,电脑装机网站,本地推荐本地推荐并查集 前言一.简介二.基础并查集三.基础并查集题目12 四.种类并查集(扩展域并查集)五.种类并查集的题目 前言 我会将一些常用的算法以及对应的题单给写完,形成一套完整的算法体系,以及大量的各个难度的题目,目前算法也…

并查集

  • 前言
  • 一.简介
  • 二.基础并查集
  • 三.基础并查集题目
    • 1
    • 2
  • 四.种类并查集(扩展域并查集)
  • 五.种类并查集的题目

前言

我会将一些常用的算法以及对应的题单给写完,形成一套完整的算法体系,以及大量的各个难度的题目,目前算法也写了几篇,题单正在更新,其他的也会陆陆续续的更新,希望大家点赞收藏我会尽快更新的!!!

一.简介

查找两个元素是否在一个(树形)集合中

二.基础并查集

一开始:所有的元素相互独立,每个元素单独成树
给出信息:x,y可以放在同一个集合中分别查找x,y的根节点,把两个树进行合并
查询:a,b看一下a,b是否在同一棵树
对于查找路径的优化:路径压缩
数组模拟树f[i] = x

三.基础并查集题目

1

洛谷P3367 【模板】并查集
在这里插入图片描述

#include <iostream>
using namespace std;
int n, m, z, x, y;
int f[200005];
int find(int k) {if (f[k] == k) {return k;}return f[k] = find(f[k]);//路径压缩
}
int main() {scanf("%d%d", &n, &m);for (int i = 1; i <= n; i++) {f[i] = i;}for (int i = 1; i <= m; i++) {scanf("%d%d%d", &z, &x, &y);if (z == 1) {f[find(y)] = find(x);}if (z == 2) {if (find(x) == find(y)) {printf("Y\n");}else {printf("N\n");}}}return 0;
}

2

洛谷P1551 亲戚
在这里插入图片描述

#include <iostream>
using namespace std;
int n, m, p, x, y;
int f[5005];
int find(int k) {if (f[k] == k) {return k;}return f[k] = find(f[k]);
}
int main() {scanf("%d%d%d", &n, &m, &p);for (int i = 1; i <= n; i++) {f[i] = i;}for (int i = 0;i < m; i++) {scanf("%d%d", &x, &y);f[find(x)] = find(y);}for (int i = 0; i < p; i++) {scanf("%d%d", &x, &y);if (find(x) == find(y)) {printf("Yes\n");}else {printf("No\n");}}return 0;
}

四.种类并查集(扩展域并查集)

敌人的敌人是朋友
维护对立关系的时候:x,y敌人关系
做两个合并:x与y的假想敌合并
------------------y与x的假想敌合并

并查集能维护连通性、传递性,通俗地说,亲戚的亲戚是亲戚。

然而当我们需要维护一些对立关系,比如 敌人的敌人是朋友 时,正常的并查集就很难满足我们的需求。

这时,种类并查集(扩展域并查集)就诞生了。

常见的做法是将原并查集扩大一倍规模,并划分为两个种类:其中[1,n]表示处于一个种类,[n+1,2n]表示处于另一个种类。

在同个种类的并查集中合并,和原始的并查集没什么区别,仍然表达他们是朋友这个含义。

考虑在不同种类的并查集中合并的意义,其实就表达 他们是敌人 这个含义了。

按照并查集美妙的 传递性,我们就能具体知道某两个元素到底是 敌人 还是 朋友 了。

至于某个元素到底属于两个种类中的哪一个,由于我们不清楚,因此两个种类我们都试试。

五.种类并查集的题目

洛谷P1525 [NOIP 2010 提高组] 关押罪犯
在这里插入图片描述
思路:我们要尽可能让矛盾中值的罪犯在两个监狱里—矛盾值排序。
敌人的敌人就是朋友:两个人a,b有仇,那么把他们放在一起显然会打起来,那么我们把a 与b的其他敌人放在一起。

首先需要并查集初始化
1.先把所有的矛盾关系按照矛盾值从大到小排一遍序,
2.接下来每次操作取出一个关系,看矛盾的两个人x和y是否已经分配到同一个集合中(并查集找父亲即可):

(1)如果在一起那么显然会打起来(会出现矛盾),那么直接输出当前的边权(矛盾值)即可(此时保证是最小矛盾值,因为已经排序了)

(2)如果不在同一组,则按照“敌人的敌人就是朋友”的原则,把x与y的其他敌人分在同一组,y与x的其他敌人分在同一组

不断进行以上操作最终可以得到答案

#include <iostream>
#include <algorithm>
using namespace std;
struct da {int a, b, c;
}d[100005];
int n, m, x, y, z;
int f[40005];
int find(int k) {if (f[k] == k) {return k;}return f[k] = find(f[k]);
}
bool cmp(struct da a, struct da b) {return a.c > b.c;
}
int main() {int ans = 0;scanf("%d%d", &n, &m);for (int i = 1; i <= n; i++) {f[i] = i;f[i + n] = i + n;}for (int i = 1; i <= m; i++) {scanf("%d%d%d", &x, &y, &z);d[i].a = x;d[i].b = y;d[i].c = z;}sort(d + 1, d + m + 1, cmp);for (int i = 1; i <= m; i++) {int fa = find(d[i].a);int ffa = find(d[i].a + n);int fb = find(d[i].b);int ffb = find(d[i].b + n);if (fa == fb || ffa == ffb) {ans = d[i].c;break;}else {f[fa] = ffb;f[fb] = ffa;}}printf("%d", ans);return 0;
}

文章转载自:

http://682GyrMT.zdgqz.cn
http://hJg7zwPt.zdgqz.cn
http://iIbyeG1N.zdgqz.cn
http://nHElN0mK.zdgqz.cn
http://8OiyIVka.zdgqz.cn
http://49vJ7tcr.zdgqz.cn
http://dbuPDSbR.zdgqz.cn
http://5d2IB3jP.zdgqz.cn
http://OZyWv8bm.zdgqz.cn
http://42ZoL7Wk.zdgqz.cn
http://UEpnfAa6.zdgqz.cn
http://LF6X0nDQ.zdgqz.cn
http://cT9V3Ar4.zdgqz.cn
http://qPA5nobr.zdgqz.cn
http://nnF8QdUL.zdgqz.cn
http://61jPNqTx.zdgqz.cn
http://B0SsuTWN.zdgqz.cn
http://eYUokLj7.zdgqz.cn
http://ooVKzLdm.zdgqz.cn
http://lcABFtq0.zdgqz.cn
http://Dj7EsgDS.zdgqz.cn
http://MUWpzu24.zdgqz.cn
http://RPUjuAEE.zdgqz.cn
http://hwQ1AZQT.zdgqz.cn
http://RB6l1O1M.zdgqz.cn
http://gx7AtiG1.zdgqz.cn
http://NLFjgXOS.zdgqz.cn
http://smqzkeLs.zdgqz.cn
http://0a2cZu8I.zdgqz.cn
http://Uq8QLlQt.zdgqz.cn
http://www.dtcms.com/wzjs/645956.html

相关文章:

  • 学网站建设可以从事什么工作以前做的网站怎么才能登陆后台
  • 大学网站 作风建设专题手机端wordpress模板下载
  • 邯郸市住房和建设官方网站建设网站需要电脑配置
  • 临高网站建设抖音怎么运营和引流
  • 嘉定公司网站设计电脑平面设计培训班多少钱
  • 上海著名网站建设vue做网站好吗
  • 南京网站建设包括哪些电影宣传网站开发设计
  • 祥云平台网站管理系统开发公司招商引资产生账务怎么做账
  • 做外贸在哪个网站车陂手机网站建设
  • 网站开发做前端还是后端电子商务他们的代表网站
  • 湖北建设信息网站 联系方式浏览器官网入口
  • 线上购物网站开发浙江海滨建设集团有限公司网站
  • thinkphp开发企业网站网站系统环境的搭建
  • 网站模板平台资源网站贴子推广怎么做
  • 给公司做网站怎么样南雄市住房和城乡建设局网站
  • 厦门市建设工程交易中心网站wordpress 众筹网站
  • 官方网站建设案例试述建设一个网站的具体步骤
  • 久久诗词网成都seo正规优化
  • 无锡手机网站开发附近寻爱
  • 重庆网站建设选圣矢wordpress前端可视化编辑器
  • 怎么发布个人网站安卓手机app开发教程
  • 网站反向绑定域名柳州本地做网站的公司
  • 常州网站设计湛江公司电话统一身份认证平台
  • 手游传奇新开服网站天元建设集团有限公司年产值
  • 办个网站需要投资多少网线制作心得体会
  • 新手做网站选材如何运行wordpress
  • 问鼎电子娱乐下载官方网站坪山网站建设行业现状
  • 登录广东省建设监理协会网站首页小广告怎么举报
  • 什么是网站交互阿里巴巴国际站怎么找客户
  • 在线网站优化公司查询网站死链接