首页 > 其他分享 >C126 带权并查集 P1196 [NOI2002] 银河英雄传说

C126 带权并查集 P1196 [NOI2002] 银河英雄传说

时间:2024-05-25 17:01:37浏览次数:15  
标签:查集 int 新根 带权 NOI2002 P1196

视频链接:

 

 

 

P1196 [NOI2002] 银河英雄传说 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

// 带权并查集
#include <iostream>
using namespace std;

const int N=30005;
int T;
int p[N],d[N],siz[N];

int find(int x){
  if(p[x]==x) return x;
  int t=find(p[x]); //记录新根t
  d[x]+=d[p[x]];    //先更新x到新根t的距离
  return p[x]=t;    //再更新p[x],路径压缩
}
int main(){
  for(int i=1;i<N;i++) p[i]=i,siz[i]=1;
  scanf("%d",&T);
  while(T--){
    char op; int x,y;
    scanf("%s %d%d",&op,&x,&y);
    if(op=='M'){
      int px=find(x),py=find(y);
      p[px]=py;         //x队列接在y队列后面
      d[px]=siz[py];    //更新 px到py 的距离
      siz[py]+=siz[px]; //在根上记录队列大小
    }
    else{
      if(find(x)!=find(y)) puts("-1");
      else printf("%d\n",abs(d[x]-d[y])-1);
    }
  }
}

 

标签:查集,int,新根,带权,NOI2002,P1196
From: https://www.cnblogs.com/dx123/p/18211426

相关文章

  • 【知识点】集合与并查集
    在前几篇文章当中,我们已经讨论了许多有关数论的知识点了,因此Macw决定写几篇数据结构的文章缓一缓。(整天写数论相关的内容容易自闭(bushi))。今天我们将会围绕一个新的数据结构,并查集(DisjointSetUnion)来展开。集合与集合的常见操作在谈论到并查集的时候,首先讨论一个前置知识......
  • C123【模板】扩展域并查集 P1892 [BOI2003] 团伙
    视频链接:C123【模板】扩展域并查集P1892[BOI2003]团伙_哔哩哔哩_bilibili  P1892[BOI2003]团伙-洛谷|计算机科学教育新生态(luogu.com.cn)//扩展域并查集#include<iostream>#include<cstring>#include<algorithm>usingnamespacestd;intn,m,a,b,......
  • 【并查集】冗余连接
    冗余连接如果两个顶点属于相同的连通分量,则说明在遍历到当前的边之前,这两个顶点之间已经连通,因此当前的边导致环出现,为附加的边,将当前的边作为答案返回PythonclassSolution:deffindRedundantConnection(self,edges:List[List[int]])->List[int]:n=len(ed......
  • 【图的连通性】【并查集】【拓扑排序】
    在图论中,不同类型的图(无向图和有向图)需要使用不同的算法和数据结构来处理它们的特性和问题。这里我们将讨论如何使用并查集来解决无向图的连通性问题,以及如何使用深度优先搜索(DFS)、广度优先搜索(BFS)和拓扑排序来解决有向图中的依赖性问题。无向图的连通性:并查集对于无向图的连通......
  • [LeetCode] 1584.连接所有点的最小费用 Kruskal And Prim 算法 Java 并查集
    Problem:1584.连接所有点的最小费用目录Kruskal算法复杂度CodePrim算法复杂度CodeKruskal算法复杂度时间复杂度:添加时间复杂度,示例:$O(mlog(m))$空间复杂度:添加空间复杂度,示例:$O(n)$CodeclassSolution{publicintminCostConnectPoints(int[][]po......
  • 并查集
    并查集并查集模板包含路径压缩+小挂大constintMAXN=1e5+1;intfather[MAXN];//存父亲节点father[1]=2指的是1节点的父亲为2intsize[MAXN]; //存每个集合的大小intstack[MAXN];//intn;//建立并查集voidbuild(){ for(inti=0;i<=n;i++)......
  • hdu1213并查集
    第一种方法是定义每个数的老大是其自身,通过每次输入的两个数,找到它两的老大,比较大小,循环将所有大的那个老大改为小的那个数,最后输出有几个老大是其自身,案例都能过,提交就错,不知错哪了......点击查看代码importjava.util.Scanner;publicclasshdu1213{ publicstaticvoid......
  • 边权并查集之奇偶游戏
    题目传送门:https://www.acwing.com/problem/content/241///懒得手敲题目先给一下题解:#include<iostream>#include<unordered_map>//这个题目有两个点要想明白,一个是点到根的距离标志着这个点的性质,且在路径压缩的过程中此点不会改变//第二点就是在出现新的关系,也就是要将两......
  • [算法学习笔记] 并查集
    提示:本文并非并查集模板讲解,是在模板基础上的进一步理解以及拓展。Review并查集可以用来维护集合问题。例如,已知\(a,b\)同属一个集合,\(b,c\)同属一个集合。那么\(a,b,c\)都属一个集合。并查集分为合并,查询操作。定义\(fa_i\)表示点\(i\)的父亲。为了降低复杂度,在fi......
  • 并查集
    1.0并查集概念对于具有传递性质、联通集合的题目可以考虑并查集。1.1并查集模板声明:以下模板来自于https://xuq7bkgch1.feishu.cn/docx/CAbedNJ5KobvinxdyKgcKsrlnrd。有n个数,编号是1~n,最开始每个数各自在一个集合中,现在要进行m个操作,操作共有两种:1.Mab,将编号为a......