//不容易啊,终于自己a了一道这种类型的题

//

#include<stdio.h>

#include<iostream>

using namespace std;

const int N=30010;

struct node {

int front,last,count;

}pre[N];

int find(int x) {//指向队尾

if(x!=pre[x].last) {

         int h=pre[x].last;

pre[x].last=find(pre[x].last);

pre[x].count=pre[h].count+pre[x].count;//路径压缩

}

return pre[x].last;

}

int find1(int x) {//求队首相当于一个元素指向两个方向,这个指向队首

if(x!=pre[x].front)

pre[x].front=find1(pre[x].front);

return pre[x].front;

}

int main() {

int n,i,a,b,f1,f2;

char  s[2];

while(scanf("%d",&n)!=EOF) {

for(i=1;i<=N;i++) {

pre[i].last=i;

pre[i].front=i;

pre[i].count=0;

}

while(n--) {

scanf("%s",s);

if(s[0]=='M') {

scanf("%d%d",&a,&b);

 f1=find(a);//a集合的队尾

 f2=find(b);

 if(f1==f2)//如果有相同的根节点不用再加了

 continue;

 f2=find1(b);//求b集合的队首

 pre[f1].last=f2;//a集合队尾指向b集合队首

 pre[f1].count=1;//权值为1

         pre[f2].front=f1;//b集合的队首指向a集合的队尾

}

else  {

scanf("%d",&a);

        find(a);

printf("%d\n",pre[a].count);

}

}

}

return 0;

}

//我在网上看了个代码我承认我的方法没有人家的好我又写了一下

#include<stdio.h>

#include<iostream>

using namespace std;

const int N=30010;

int  pre[N],dis[N],sondis[N];

int find(int x) {

 if(x!=pre[x]) {

  int h=pre[x];

  pre[x]=find(pre[x]);

  dis[x]+=dis[h];

 }return pre[x];

}

void unions(int x,int y) {

 int f1=find(x);

 int f2=find(y);

 if(f1==f2)

  return ;

 pre[f1]=f2;

 dis[f1]=sondis[f2]+1;

 sondis[f2]=sondis[f2]+sondis[f1]+1;

}

int main() {

 int n,m,i,j,k,a,b;

 char s[2];

 while(scanf("%d",&n)!=EOF) {

  for(i=1;i<=N;i++) {

   pre[i]=i;

   dis[i]=0;

   sondis[i]=0;

  }

  while(n--) {

   scanf("%s",s);

   if(s[0]=='M') {

    scanf("%d%d",&a,&b);

    unions(a,b);

   }

   else {

    scanf("%d",&a);

    find(a);

    printf("%d\n",dis[a]);

   }

  }

 }

 return 0;

}

POJ 1988相对偏移的更多相关文章

  1. poj.1988.Cube Stacking(并查集)

    Cube Stacking Time Limit:2000MS     Memory Limit:30000KB     64bit IO Format:%I64d & %I64u Submi ...

  2. POJ 1988 Cube Stacking(带权并查集)

    Cube Stacking Time Limit: 2000MS   Memory Limit: 30000K Total Submissions: 23678   Accepted: 8299 Ca ...

  3. 【POJ 1988】 Cube Stacking (带权并查集)

    Cube Stacking Description Farmer John and Betsy are playing a game with N (1 <= N <= 30,000)id ...

  4. poj 1988 并查集(终于看懂一个了/(ㄒoㄒ)/~~)

    题意:有几个stack,初始里面有一个cube.支持两种操作:1.move x y: 将x所在的stack移动到y所在stack的顶部.2.count x:数在x所在stack中,在x之下的cube的 ...

  5. POJ 1988 Cube Stacking(并查集+路径压缩)

    题目链接:id=1988">POJ 1988 Cube Stacking 并查集的题目 [题目大意] 有n个元素,開始每一个元素自己 一栈.有两种操作,将含有元素x的栈放在含有y的栈的 ...

  6. POJ 1988 Cube Stacking( 带权并查集 )*

    POJ 1988 Cube Stacking( 带权并查集 ) 非常棒的一道题!借鉴"找回失去的"博客 链接:传送门 题意: P次查询,每次查询有两种: M x y 将包含x的集合 ...

  7. POJ 1988 Cube Stacking (种类并查集)

    题目地址:POJ 1988 这道题的查找合并的方法都能想的到,就是一点没想到,我一直天真的以为查询的时候,输入后能立即输出,这种话在合并的时候就要所有的结点值都要算出来,可是经过路径压缩之后,没办法所 ...

  8. [POJ 1988] Cube Stacking (带值的并查集)

    题目链接:http://poj.org/problem?id=1988 题目大意:给你N个方块,编号从1到N,有两种操作,第一种是M(x,y),意思是将x所在的堆放到y所在的堆上面. 第二种是C(x) ...

  9. 有权并查集,Poj(1988)

    题目链接:http://poj.org/problem?id=1988 题目大意: 有n个从1到n编号的箱子,将每个箱子当做一个栈,对这些箱子进行p次操作,每次操作分别为以下两种之一: 输入 M x ...

随机推荐

  1. 安装Kube

    安装Docker yum install -y docker 加速Docker DOCKER_MIRRORS="https://5md0553g.mirror.aliyuncs.com&qu ...

  2. AJPFX关于StringBuffer类的总结

    StringBuffer类一.字符串缓冲区,是一个容器.没有子类不能继承.特点:长度可变化:可操作多个数据类型:可通过toString()变成字符串.二.存储方法1.StringBuffer appe ...

  3. mongodb用户权限管理(二)

    数据库 分配用户权限 有了创建语法,和参数说明,接下来开始实践. 注意,还有一点,账号是跟着数据库绑定的,在那个库里授权,就在那个库里验证(auth) 否则会失败 创建 账号管理授权权限 的账号 &g ...

  4. 合并百度影音的离线数据 with python 2.2 bdv格式的更新

    百度影音的bdv格式又有变化. 此次存在2种bdv格式. 格式1:每个文件夹内就一个bdv文件,文件合并后改名avi即可. 格式2:每个文件夹内一个bdv文件作为索引,其他附加guid的文件作为数据. ...

  5. cookie设置和读取以及获取超链接参数

    function setCookie(c_name, value, expiredays) { var exdate = new Date() exdate.setDate(exdate.getDat ...

  6. webpac入门

    基于node环境,必须确保node已经安装:node-v,npm-v 基础入门 前身:browserify 缺点:只能转化JS webpack作用:一切都是模块化(js.css图片等),一个模块加载器 ...

  7. Swift protocol extension method is called instead of method implemented in subclass

    Swift protocol extension method is called instead of method implemented in subclass protocol MyProto ...

  8. ansible配置mysql主从复制

    配置主机1.下载安装所需安装包 [root@server1 ansible]# lsansible-2.7.8-1.el7.noarch.rpmansible-tower-setup-bundle-3 ...

  9. 面试必备【含答案】Java面试题系列(二

    1.写clone()方法时,通常都有一行代码,是什么?答:super.clone(),他负责产生正确大小的空间,并逐位复制. 2.GC 是什么? 为什么要有GC?答:GC 是垃圾收集的意思(Gabag ...

  10. 微擎we7模块和模板安装方法

    2017年06月08日 09:26:55 源码学习分享 阅读数:15643 标签: we7 更多 个人分类: 微擎we7   版权声明:本文为博主原创文章,未经博主允许不得转载. https://bl ...