首页 > 其他分享 > 并查集 堆排序 (9/10)

并查集 堆排序 (9/10)

时间:2023-09-10 23:33:39浏览次数:35  
标签:10 d% int scanf 查集 堆排序 节点 find

并查集模板

 注意查找到后查找的节点直接连接根节点

#include<iostream>
using namespace std;
const int N = 100010;
int p[N];

//关键记住find函数 int find(int a) { if (p[a] != a) p[a] = find(p[a]);//不等于根节点就往头结点走,并且等于 return p[a]; } int main() { int m, n; scanf("%d%d", &m, &n); for (int i = 1; i <= m; i++) p[i] = i;//每个节点都赋值为根节点 while (n--) { char c; cin >> c; int x, y; if (c == 'M') { scanf("%d%d", &x, &y); p[find(x)] = find(y);//让右边作为左边的根节点 } else { scanf("%d%d", &x, &y); if (find(x) == find(y))printf("Yes\n"); else printf("No\n"); } } return 0; }

 

堆排序

 

#include<iostream>
using namespace std;
const int N = 1000010;
int a[N];
int n, m; int siz;
void down(int u)
{
    int t = u;//注意下面判断时用u,不要用t,因为t会改变,而后面的t是比较小的数,用小的比较
    if (a[u * 2] < a[t] && u * 2 <= siz) t = u * 2;
    if (a[u * 2 + 1] < a[t] && u * 2 + 1 <= siz) t = u * 2 + 1;
    if (t != u) {
        swap(a[t], a[u]);
        down(t);
    }
}
int main()
{
    cin >> n >> m;
    for (int i = 1; i <= n; i++) scanf("%d", &a[i]);
    siz = n;
    for (int i = n / 2; i; i--) down(i);
    while (m--){
        printf("%d ", a[1]);
        a[1] = a[siz];
        siz--;//先减1,再down
        down(1);
    }
    return 0;
}

 

标签:10,d%,int,scanf,查集,堆排序,节点,find
From: https://www.cnblogs.com/daimazhishen/p/17692284.html

相关文章

  • Terraform 实现循环for和条件判断if (10)
    实现循环(for)Terraform中本身并不支持循环的语句,但是可以通过其他形式来实现循环的效果。每一个资源块除了他所支持的特定参数外,Terraform也具有一种被称为mtacmt元参数的参数。所谓元参数就是这种参数能够引用到任意的资源块中,从而达到更改资源原有行为的目的。provisioner......
  • 9.10 每日报告
    今天学习phoenix连接,用springboot整合mybatis和phoenix还没有成功,今天下午练了背,游泳今天解决了hbase和phoenix不同步的问题,其实也不叫解决,他们是存在一个映射的关系,得再hbase和phoenix建立一个表名相同的表,然后再phoenix中添加数据,hbase中也能查询出来。......
  • 2023.9.10日报
    今天主要继续学习了springboot的相关内容,在昨天实现了基础的登录功能后,今天对增删改查有了更深刻的认识特别是通过连接hive,对于网页的getmapper和postmapper有了更深刻的认识,实现了基础的增删改查并且优化了页面......
  • 【230910-2】双曲线:y^2/160^2-x^2/120^2=1图线及特征
    【图像】【代码】<!DOCTYPEhtml><htmllang="utf-8"><metahttp-equiv="Content-Type"content="text/html;charset=utf-8"/><head><title>双曲线:y^2/160^2-x^2/120^2=1</title><styletype=&qu......
  • [GAMES101] 我的结课打卡
    ......
  • 2023-9-10 #68 然而在幻境的尽头并没有传说的什么出口
    最近一直在摆,没有干什么正经事,还是挺愧疚的。481P8322『JROI-4』少女幻葬所有数除\(k\)变为要求相邻两项不互素,相邻三项\(\gcd=1\)。尝试列出dp,令\(f_{i,j,k}\)表示考虑前\(i\)个数,后两项\(\gcd=j\),最后一项等于\(k\)的方案数。根据P7575「PMOI-3」公约数的......
  • 【230910-1】双曲线:x^2/120^2+y^2/150^2=1图线及特征
    【图像】【代码】<!DOCTYPEhtml><htmllang="utf-8"><metahttp-equiv="Content-Type"content="text/html;charset=utf-8"/><head><title>双曲线:x^2/120^2+y^2/150^2=1</title><styletype=&qu......
  • 20211105李宜时《信息安全系统设计基础》第一周学习总结
    20211105李宜时《信息安全系统设计基础》第一周学习总结老师好,我针对教科书和云班课上面的知识学习了这门课第一章和第二章的知识Linux的一些常用的命令ls:用于列出目录中的文件和子目录。cd:用于改变当前工作目录。pwd:显示当前工作目录的路径。mkdir:创建新的目录。rmdir:删......
  • 2023-09-10:用go语言编写。作为项目经理,你规划了一份需求的技能清单 req_skills, 并打算
    2023-09-10:用go语言编写。作为项目经理,你规划了一份需求的技能清单req_skills,并打算从备选人员名单people中选出些人组成一个「必要团队」(编号为i的备选人员people[i]含有一份该备选人员掌握的技能列表)。所谓「必要团队」,就是在这个团队中,对于所需求的技能列表req_skills......
  • 2023-09-10:用go语言编写。作为项目经理,你规划了一份需求的技能清单 req_skills, 并打算
    2023-09-10:用go语言编写。作为项目经理,你规划了一份需求的技能清单req_skills,并打算从备选人员名单people中选出些人组成一个「必要团队」(编号为i的备选人员people[i]含有一份该备选人员掌握的技能列表)。所谓「必要团队」,就是在这个团队中,对于所需求的技能列表req_sk......