【POJ】poj 1988(并查集_点到跟的距离)

【POJ1988】Cube Stacking(并查集水题) 题面:【POJ1988】Cube Stacking 题意: 有n个编号分别为1~n的立方体以及两种操作,一种是move操作,一种是count操作。move操作就是让你把含x的一堆立方体移到含y的一堆立方体的上面,count操作就是让你求出编号为x的立方体底下有几个立方体。 解析: 一看到这道题,很容易就能想到用并查集来做,而这道题也的确是用并查集来做的O(∩_∩)O~ 首先,我们先来考虑... 阅读详情

 

Description

Farmer John and Betsy are playing a game with N (1 <= N <= 30,000)identical cubes labeled 1 through N. They start with N stacks, each containing a single cube. Farmer John asks Betsy to perform P (1<= P <= 100,000) operation. There are two types of operations: 
moves and counts. 
* In a move operation, Farmer John asks Bessie to move the stack containing cube X on top of the stack containing cube Y. 
* In a count operation, Farmer John asks Bessie to count the number of cubes on the stack with cube X that are under the cube X and report that value. 

Write a program that can verify the results of the game. 

Input

* Line 1: A single integer, P 

* Lines 2..P+1: Each of these lines describes a legal operation. Line 2 describes the first operation, etc. Each line begins with a 'M' for a move operation or a 'C' for a count operation. For move operations, the line also contains two integers: X and Y.For count operations, the line also contains a single integer: X.

Note that the value for N does not appear in the input file. No move operation will request a move a stack onto itself. 

Output

Print the output from each of the count operations in the same order as the input file. 

Sample Input

6
M 1 6
C 1
M 2 4
M 2 6
C 3
C 4

Sample Output

1
0
2

这是一个并查集的问,只不过计算下面有多少个的时候计算所有的数量,并且减去这个上面的数量;详细见代码注释
 

 

 

#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
using namespace std;
struct group
{
    int fa;///他的父亲节点
    int up;///表示上面有多少个;
    int under;///表示下面有多少个,其中包括他自身;
}gro[30005];

void init( int n)
{
    for ( int i = 0; i < n; i++ )
    {
        gro[i].fa = i;
        gro[i].up = 0;///它上面的初始化为0;
        gro[i].under = 1;///他下面的初始化为1,因为包括自身
    }
}

int finds(int x)
{
    if ( gro[x].fa == x )
        return x;
    int p = gro[x].fa;
    gro[x].fa = finds(gro[x].fa);///将这个节点加入到根节点的下面;下面一行是计算它上面的数量
    gro[x].up += gro[p].up;///自行YY
    return gro[x].fa;
}



void unit( int x,int y)
{
     y = finds(y);
     x = finds(x);

     gro[y].fa = x;
     gro[y].up = gro[x].under;///y上方的就是放在y上方的一堆的总数,其中包括上方的根节点,既表达为gro[x].under
     gro[x].under += gro[y].under;
}
/*
bool same(int x, int y )
{
    return finds(x) == finds(y);
}
*/
int counts ( int x )
{
    int ans = 0;
    int y = finds(x);
    ans = gro[y].under - gro[x].up-1;///极端出总数,由于uo不包括自身,所以最后要-1,就是减去自身;
    return ans;
}

int main()
{
    //freopen("in.txt","r",stdin);
    //memset( vis,0,sizeof(vis));
    init(30000);
    int num;
    cin >> num;
    while ( num > 0 )
    {
        num--;
        char oper;
        cin >> oper;
        int fir,sec;

        if ( oper =='M' )
        {
            cin >> fir >> sec;
            unit( fir, sec );
        }
        if ( oper =='C' )
        {
            int x;
            cin >> x;
            cout << counts(x) << endl;
        }
    }
}

 

 

 

 

 

 

 

葵花 Himawari 8/9号数据学习记录-01-数据初识 葵花卫星学习记录,第一章:卫星的来源与卫星数据的波段介绍 阅读详情

相关推荐

海康视觉通讯配置

本文介绍了海康通讯管理中TCP和Modbus协议的配置方法。TCP通讯时,视觉系统作为服务器接收PLC客户端发送的触发信号,需注意十进制与十六进制字符串的转换。Modbus配置需填写PLC的IP地址和寄存器首地址,并预先定义整型变量。TCP通讯需开启16进制发送模式以避免数据格式问题。文章重点说明了不同通讯方式下的数据格式转换和参数设置要点。

A567852的博客 2243

hdu 2545(并查集求节点到根节点的距离)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2545 思路:dist[u]表示节点u到根节点的距离,然后在查找的时候更新即可,最后判断dist[u],dist[v]的大小即可。 1 #include&lt;iostream&gt; 2 #include&lt;cstdio&gt; 3 #include&lt;cstring&g...

weixin_33950035的博客 243

CTF全能工具箱ProV2:集成AI与94GB离线资源库,打造无网环境下的智能解题流水线

CTF全能工具箱ProV2是一款专为线下CTF比赛设计的All-in-One离线解决方案。它集成了94GB的庞大离线资源库,涵盖Web、逆向、Pwn等全方向工具链与知识库,并创新性地内置了本地AI大模型,可在断网环境下提供智能解题辅助,实现从信息收集到漏洞利用的智能流水线作业,极大提升比赛效率。

weixin_29240343的博客 422

银河英雄传说——维护距离与节点数的并查集

题目描述 有一个划分为N列的星际战场,各列依次编号为1,2,…,N。 有N艘战舰,也依次编号为1,2,…,N,其中第i号战舰处于第i列。 有T条指令,每条指令格式为以下两种之一: 1、M i j,表示让第i号战舰所在列的全部战舰保持原有顺序,接在第j号战舰所在列的尾部。 2、C i j,表示询问第i号战舰与第j号战舰当前是否处于同一列中,如果在同一列中,它们之间间隔了多少艘战舰。 现在需要你编写一个程序,处理一系列的指令。 输入格式 第一行包含整数T,表示共有T条指令。 接下来T行,每行一个指令,指令有两种

Dripping Blog 297

海康VisionMaster零代码开发实战:从PLC工程师到视觉专家的捷径

本文为PLC工程师提供了利用海康VisionMaster视觉平台实现零代码视觉开发的实战指南。文章详细阐述了如何通过图形化流程设计替代传统编程,快速搭建视觉检测应用,并实现与PLC的无缝通讯,是工程师从设备控制迈向视觉系统集成的有效捷径。

weixin_29201859的博客 293

PRIDE PPP-AR软件实战:从ZTD解算到PWV反演的全流程避坑指南

本文详细解析了使用PRIDE PPP-AR软件进行GNSS数据处理的全流程,重点涵盖从ZTD解算到PWV反演的关键步骤与精度评估。文章深入剖析了软件部署、数据准备、参数配置中的常见“坑点”,并提供了与IGS ZTD及ERA5产品进行交叉验证的实用方法,旨在帮助用户高效、准确地获取高精度大气可降水量产品。

p8q9r0的博客 605

(并查集+记录到根的距离)Dragon Balls--HDOJ

Dragon Balls Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 868 Accepted Submission(s): 344Problem Description Five hundred years later, the nu

MM_Silence 434

2025 华为OD机试真题e卷 C语言 实现【竖直四子棋】

竖直四子棋的棋盘是竖立起来的,双方轮流选择棋盘的一列下子,棋子因重力落到棋盘底部或者其他棋子之上,当一列的棋子放满时,无法再在这列上下子。

MISAYAONE的博客 1416

BNU Corporative Network(并查集求点到根节点的距离)@

Corporative Network Time Limit: 3000ms Memory Limit: 30000KB This problem will be judged on PKU. Original ID: 1962 64-bit integer IO format: %lld      Java class name: Main Prev Submit

MR CODER 380

AI Agent开发大全第一课-AI是什么以及如何使用AI

近年来,人工智能的迅猛发展引发了广泛的关注,尤其是“大模型”这一概念越来越深入人心。大模型,顾名思义,通常指的是那些拥有大量参数、能够处理复杂任务的机器学习模型。与传统小模型相比,大模型在数据处理、信息理解和生成等方面表现更加出色。为了理解为什么现在的AI被称为大模型,我们需要深入探讨几个关键因素。立角色是指在提示词中清晰地界定交互双方的身份。明确用户希望模型扮演的角色,可以帮助模型更准确地理解上下文和用户需求。

打造全国最全的AI Agent开发知识领域的博客 1406

【Windows Server 2019】邮件服务器配置与管理——安装及配置Winmail服务器(上)

博文介绍了如何安装邮件服务器 Winmail,如何配置Winmail,包括运行服务器,Winmail管理工具介绍和域名配置。

VMware, Windows, Linux, Cisco, Container, Kubernetes, Kali 2万+

带权并查集 记录节点到根的距离

AcWing 240. 食物链 #include <bits/stdc++.h> using namespace std; const int N = 50005; int p[N], dis[N]; //dis为到根节点的距离 int find(int x) { if (x != p[x]) { int former_p = p[x]; p[x] = find(p[x]); dis[x] += dis[former_p]; .

BuShiWoovXiang的博客 249

FISCO BCOS 三、多群组部署以及新节点加入群组

本章主要以星形组网和并行多组组网拓扑为例,指导您了解如下内容:了解如何使用创建多群组区块链安装包;了解创建的多群组区块链安装包目录组织形式;学习如何启动该区块链节点,并通过日志查看各群组共识状态;学习如何向各群组发送交易,并通过日志查看群组出块状态;了解群组内节点管理,包括节点入网、退网等;了解如何新建群组。

qq_63235624的博客 2919

并查集(POJ1988)

Language: Cube Stacking Time Limit: 2000MS Memory Limit: 30000K Total Submissions: 23340 Accepted: 8182 Case Time Limit: 1000MS Description Farmer John and Betsy are playing a game with N (1 <

liuzhan214的博客 2499

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

POJ 1988 双向并查集

2333333333

Kiritow的学园 977

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

[POJ 1988]Cube Stacking[带权并查集]

题目链接:[POJ 1988]Cube Stacking[带权并查集] 题意分析: FJ和B在拿一些方块堆玩游戏。初始时总共有3e4个方块堆,每个堆上一个方块。现在有两种操作。操作M将含有x的方块堆,移到含有y的方块堆上。操作C将统计方块x的下方有多少个方块。 解题思路: 设置三个数组,一个是方块所在的堆块的数组p[i],还有一个是方块到其父亲节点距离的dis[]数组,最后一个是方块所在堆

闲停 763

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

POJ1988 Cube Stacking 【并查集】

题目链接:http://poj.org/problem?id=1988 这题是教练在ACM算法课上讲的一道题,当时有地方没想明白,现在彻底弄懂了。 题目大意:n代表有n个石头,M a, b代表将a石头所在的集合放在b石头所在的所有集合的上方。C a代表询问a石头下方有多少个石头。 思路: 1.一开始我是想用一个 num 数组来表示每块石头下方有多少个石头,然后直接用并查集来写,但...

a6334167的博客 115

带权并查集 POJ1988 POJ2492

单纯的并查集很简单,带权并查集还能解决更多的问题,才更好玩,来个题热身。对于下面的知识,现在就当你已经熟练掌握了递归和并查集的路径压缩。 POJ1988:题目链接 http://poj.org/problem?id=1988 题目大意:有N(N  M x y : 表示把方块x所在的堆,拿起来叠放到y所在的堆上。  C x : 问方块x下面有多少个方块。    操作最多有 P (P

Jonariguez 吾本优秀 782

poj1988 Cube Stacking 带权并查集

题目链接:http://poj.org/problem?id=1988 题意:有n个方块,编号为1-n,现在存在两种操作: M i j 将编号为i的方块所在的那一堆方块移到编号为j的方块所在的那一堆方块上方,方块原先的相对位置保持不变 C i 计算在方块i下面有多少个方块 虽然知道这道题用并查集做,但并没什么思路。看了看题解:用h[i]维护当前方块到其父亲方块的距离...

weixin_30548917的博客 158

POJ1988(并查集)

Cube Stacking 题目链接 题目描述: Farmer John and Betsy are playing a game with N (1 <= N <= 30,000)identical cubes labeled 1 through N. They start with N stacks, each containing a single cube. Farmer Jo...

Yang_1998的博客 1118

【带权并查集】-- poj1988

题目来源:poj 1988 Cube Stacking #include <iostream> using namespace std; const int maxn = 30010; int father[maxn]; //父亲数组 int son[maxn]; //包括第i个结点在内的其子树结点的个数 int dis[maxn]; //表示第i个结点到根节点的距离 /...

圣托里尼的日落啊~的博客 229

poj1988带权并查集

题目链接:http://poj.org/problem?id=1988 思路:lnc记录该节点到其父节点的距离,sum记录这一堆的个数,lnc在更新父节点是需要更新,注意在查询时需要做一次更新。 #include #include using namespace std; const int N=30005; int fa[N],lnc[N],p,sum[N]; void init() {

Delacour_的专栏 682

POJ 1988 Cube Stacking

题目: POJ 1988 Cube Stacking ,哈哈,我们今天来看一道复杂一点的题嘛,这是选自POJ上的一道题,好了,我们一起来看看题意吧: 考虑到直接复制题目,或者截屏的方式不是很方便阅读,我就把直接题目链接放下面! 题目传送门: POJ 1988 Cube Stacking 思路: 读了题目,思考了很久,才发现这道题就是个带权重的并查集,具体就看代码吧! 我们来看看成功AC的代码吧: #include<iostream> #include<string> using

小知识吖 1万+

并查集 POJ 2524、POJ1988、HDU1272

给出学生总数n,询问m对学生信仰是否一样,输入m行信仰一样的学生,输出信仰种类数量。并查集入门

dreambyday 410

POJ 1988(带权并查集)

题目链接:http://poj.org/problem?id=1988   题目大意:最开始有N个砖头(1&lt;=N&lt;=30000),然后进行p次操作,M x y操作是将带x编号的那堆石头放到带y编号的那堆石头的头上,C x操作是查询x编号下面有几块石头   题目思路:设置一个sum[x]表示x为首的那堆石头里有几个石头,dis[x]记录x到自己那堆石头最头上石头的距离。当M x ...

smilestruggler_Fly To Higher 527

POJ-1988-Cube Stacking

POJ-1988-Cube Stacking 传送门 这道题是并查集啦~ 题目大意:初始化的时候单独的列上只有一个方块。 给出两个操作: 1.移动操作。(a, b)将a上的一整列移动在b的上面 2.询问操作。a 计算a下面有多少方块 t次询问 平常思路路径压缩的时候我们直接把当前结点的父结点fa[]赋值为根结点了。 这道题。我们在两个结点结合的时候比如M x, y。x的那一列移动到y的上面。 我们...

qq_44624316的博客 221
上一篇: 【POJ】poj 1611(并查集_裸题)
下一篇: 【POJ】poj 1182(并查集)
三生石1103
博客等级 码龄12年 16粉丝 87原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值