hdu 2818 Building Block

点击打开hdu 2818

思路: 带权并查集
分析:
1 题目给定2种指令 M x y把x的集合放在y集合的上面,C x求x的下面有多少个元素
2 我们用rank[x]表示x以下有多少个元素,那么对于指令M x y我们始终把左边的合并到右边,那么这样rank就满足压缩的性质
3 但是因为这边的合并和普通不一样,它是把x所在的集合放在y所在集合上面,实际上是x的跟节点合并到y集合的最远点,所以我们应该开个数组记录当前集合最远的点

代码:

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;

const int MAXN = 30010;

int n;
int father[MAXN];
int rank[MAXN];
int maxNum[MAXN];

void init(){
    memset(rank , 0 , sizeof(rank));
    memset(maxNum , 0 , sizeof(maxNum));
    for(int i = 0 ; i < MAXN ; i++)
        father[i] = i;
}

int find(int x){
    if(father[x] != x){
        int fa = father[x];
        father[x] = find(fa);
        rank[x] += rank[fa];
    }
    return father[x];
}

void Union(int x , int y){
    int fx = find(x);
    int fy = find(y);
    if(fx != fy){
        father[fx] = fy;
        rank[fx] += maxNum[fy]+1;
        maxNum[fy] += maxNum[fx]+1;
    }
}

int main(){
    char c;
    int x , y;
    while(scanf("%d%*c" , &n) != EOF){
         init();
         while(n--){
              c = getchar();
              if(c == 'M'){
                  scanf("%d%d%*C" , &x , &y);
                  Union(x , y);
              }
              else{
                  scanf("%d%*C" , &x);
                  find(x);
                  printf("%d\n" , rank[x]);
              }
         }
    }
    return 0;
}
时间: 2024-09-06 13:34:11

hdu 2818 Building Block的相关文章

HDU 2818 Building Block, poj 1988 Cube Stacking:带权并查集

链接: HDU: http://acm.hdu.edu.cn/showproblem.php?pid=2818 POJ:  http://poj.org/problem?id=1988 题目: Problem Description John are playing with blocks. There are N blocks (1 <= N <= 30000) numbered 1...N.Initially, there are N piles, and each pile contai

算法:poj 2749 &amp;amp; hdu 1815 Building roads(2-SAT + 二分,好题)

[题目大意] 有n个牛棚, 还有两个中转站S1和S2, S1和S2用一条路连接起来. 为了使得任意 牛棚两个都可以有道路联通,现在要让每个牛棚都连接一条路到S1或者S2. 有a对牛棚互相有仇恨, 所以不能让他们的路连接到同一个中转站.还有b对牛棚互相喜欢,所以他们的路必须连到同一个中专站. 道路的长度是两点的曼哈顿距离. 问最小的任意两牛棚间的距离中的最大值是多少? [思路] 两天前看了这题,当时没什么想法,今天又翻看了一下,想出来了. 每个 牛棚有可以选择S1或者S2,并且有矛盾对,是2-SA

并查集专题【完结】

个人整理 并查集 [poj] 第一题 poj 1182 食物链 点击打开链接poj 1182 思路: 带权并查集 分析: 1 典型的带权并查集的题目 2 如果x和y是同类的关系认为是0,如果是x吃y那么关系认为是1,那么x和y的关系为2就说明y吃x 3 那么如果x和y同类则rank[x] == rank[y] , 如果x吃y那么rank[x] == (rank[y]+1)%3 , 注意mod3的使用 点击查看代码 第二题 poj 1308 Is It A Tree? 点击打开链接 poj 130

(zhuan) Building Convolutional Neural Networks with Tensorflow

Ahmet Taspinar  Home About Contact Building Convolutional Neural Networks with Tensorflow Posted on augustus 15, 2017 adminPosted in convolutional neural networks, deep learning, tensorflow 1. Introduction In the past I have mostly written about 'cla

Java Secure Socket Extension (JSSE) Reference Guide

Skip to Content Oracle Technology Network Software Downloads Documentation Search Java Secure Socket Extension (JSSE) Reference Guide This guide covers the following topics: Skip Navigation Links Introduction Features and Benefits JSSE Standard API S

SQL Server2005 Analysis服务实践之起步

server 一.在Analysis Services项目中定义数据源视图 1.根据模板创建Analysis Services项目 BIDS(Business Intelligence Development Studio)利用模板创建不同类型的项目,Analysis Services项目即为其中的一个模板,而且这些模板是可自定义的. 2.定义数据源 使用Native OLE DB\Microsoft OLE DB Provider for SQL Server驱动程序连接SQL Server.

Systemtap examples, Identifying Contended User-Space Locks

本文的例子 可用于判断程序性能问题是否由于futex锁冲突引起的. This section describes how to identify contended user-space locks throughout the system within a specific time period. The ability to identify contended user-space locks can help you investigate poor program performa

解析Atlas—微软的Ajax工具包

ajax|微软 微软已经在进行一个版本Visual Stuido 的研发,其中一个重要的研究方向就是通过Ajax风格的编程在浏览器中实现日益流行的富客户端应用. 今后的IE中将拥有Ajax所需的所有东西--DHTML.JScript和XmlHttp.实际上Outlook Web Access从1998年开始就已经提供了这种伟大的浏览体验了.在ASP.NET 2.0中,微软使用异步回调及舒适的Ajax风格的应用程序的编写更加简单,并且,微软为此提供了大量的内建控件. 目前,几乎所有的浏览器都提供了

Atlas—微软的Ajax工具包(来自MSDN Scott Guthrie)

ajax|微软 微软现在已经进入了ASP.NET 2.0和Visual Web Developer 2005发布版最后的RTM里程碑时刻.为了达到ZBB(Zero Bug Bounce),微软已经锁定了这些产品的特性,着重优化最终的质量.性能和可靠性.   与此同时,微软开始了下一个发布版本的研发,其中一个重要的研究方向就是通过Ajax风格的编程在浏览器中实现日益流行的富客户端应用.   今后的IE中将拥有Ajax所需的所有东西--DHTML.JScript和XmlHttp.实际上Outlook