//不容易啊,终于自己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. 自己制作ssl证书

    首先执行如下命令生成一个key  openssl genrsa -des3 -out ssl.key 1024  然后他会要求你输入这个key文件的密码.不推荐输入.因为以后要给nginx使用.每次r ...

  2. 快速体验openstack-用devstack安装openstack

    官网安装说明: --2014年11月15日14:14:21 安装环境:Ubuntu12.04,安装官网的说明遇到了小问题,记录在这里 --http://docs.openstack.org/devel ...

  3. window下phpstudy开启redis扩展

    注:一定要注意自己PHP的版本结构是64还是32位的!其次查看PHP Extension Build是NTS or TS! 1.使用phpinfo()函数查看PHP的版本信息,这会决定扩展文件版本(特 ...

  4. php5.6.30开启redis扩展

    注:5.6版本的php一定要下载phpredis3.0以上的版本,之前自己下载用的2.2.4的redis,安装配置完成后,PHP死活不支持redis的扩展,通过phpinfo打印也压根看不到,重复服务 ...

  5. EasyUI edatagrid插件使用小计

    html片段 <table id="menuview" style="width:100%"> <thead> <tr> & ...

  6. qt creator转换到 COFF 期间失败: 文件无效或损坏

    转载请注明出处http://www.cnblogs.com/dachen408/p/7226198.html 环境 Qt5.5+Vs2010,删除vs2010安装目录bin下的cvtres.exe解决 ...

  7. Swift 关键字 inout - 让值类型以引用方式传递

    两种参数传递方式 值类型 传递的是参数的一个副本,这样在调用参数的过程中不会影响原始数据. 引用类型 把参数本身引用(内存地址)传递过去,在调用的过程会影响原始数据. 在 Swift 众多数据类型中, ...

  8. jQuery 收缩展开效果

    <!DOCTYPE html> <html lang="en"> <head> <meta http-equiv="Conten ...

  9. dxf组码

    值 说明 -5 APP:永久反应器链 -4 APP:条件运算符(仅与 ssget 一起使用) -3 APP:扩展数据 (XDATA) 标记(固定) -2 APP:图元名参照(固定) -1 APP:图元 ...

  10. mac 目录颜色设置

    1 export CLICOLOR=1  2 export LSCOLORS=gxfxaxdxcxegedabagacad