POJ 1988相对偏移
//不容易啊,终于自己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相对偏移的更多相关文章
- poj.1988.Cube Stacking(并查集)
Cube Stacking Time Limit:2000MS Memory Limit:30000KB 64bit IO Format:%I64d & %I64u Submi ...
- POJ 1988 Cube Stacking(带权并查集)
Cube Stacking Time Limit: 2000MS Memory Limit: 30000K Total Submissions: 23678 Accepted: 8299 Ca ...
- 【POJ 1988】 Cube Stacking (带权并查集)
Cube Stacking Description Farmer John and Betsy are playing a game with N (1 <= N <= 30,000)id ...
- poj 1988 并查集(终于看懂一个了/(ㄒoㄒ)/~~)
题意:有几个stack,初始里面有一个cube.支持两种操作:1.move x y: 将x所在的stack移动到y所在stack的顶部.2.count x:数在x所在stack中,在x之下的cube的 ...
- POJ 1988 Cube Stacking(并查集+路径压缩)
题目链接:id=1988">POJ 1988 Cube Stacking 并查集的题目 [题目大意] 有n个元素,開始每一个元素自己 一栈.有两种操作,将含有元素x的栈放在含有y的栈的 ...
- POJ 1988 Cube Stacking( 带权并查集 )*
POJ 1988 Cube Stacking( 带权并查集 ) 非常棒的一道题!借鉴"找回失去的"博客 链接:传送门 题意: P次查询,每次查询有两种: M x y 将包含x的集合 ...
- POJ 1988 Cube Stacking (种类并查集)
题目地址:POJ 1988 这道题的查找合并的方法都能想的到,就是一点没想到,我一直天真的以为查询的时候,输入后能立即输出,这种话在合并的时候就要所有的结点值都要算出来,可是经过路径压缩之后,没办法所 ...
- [POJ 1988] Cube Stacking (带值的并查集)
题目链接:http://poj.org/problem?id=1988 题目大意:给你N个方块,编号从1到N,有两种操作,第一种是M(x,y),意思是将x所在的堆放到y所在的堆上面. 第二种是C(x) ...
- 有权并查集,Poj(1988)
题目链接:http://poj.org/problem?id=1988 题目大意: 有n个从1到n编号的箱子,将每个箱子当做一个栈,对这些箱子进行p次操作,每次操作分别为以下两种之一: 输入 M x ...
随机推荐
- 【LeetCode 33】Search in Rotated Sorted Array
Search in Rotated Sorted Array 分段有序的数组,二分查找返回下标,没有返回-1 数组有序之后经过 rotated, 比如:6 1 2 3 4 5 or 5 6 7 8 ...
- 414 Third Maximum Number 第三大的数
给定一个非空数组,返回此数组中第三大的数.如果不存在,则返回数组中最大的数.要求算法时间复杂度必须是O(n).示例 1:输入: [3, 2, 1]输出: 1解释: 第三大的数是 1.示例 2:输入: ...
- 关于通过spring-web的ServletRequestUtils工具类对获取getParameter传参的默认转换基本数据类型的学习
基于spring-web(4.1.4)包的org.springframework.web.bind.ServletRequestUtils工具类对HttpServletRequest获取的传递入参获取 ...
- Hadoop YARN学习之重要术语总结(6)
Hadoop YARN学习之重要术语总结(6) - SLA服务等级 - RM(ResourceManager) - AM(ApplicationMaster) - NM(NodeMaster) - M ...
- Hadoop YARN学习之Hadoop框架演进历史简述
Hadoop YARN学习之Hadoop框架演进历史简述(1) 1. Hadoop在其发展的过程中经历了多个阶段: 阶段0:Ad Hoc集群时代 标志着Hadoop的起源,集群以Ad Hoc.单用户方 ...
- Java集合框架源码(三)——arrayList
1. ArrayList概述: ArrayList是List接口的可变数组的实现.实现了所有可选列表操作,并允许包括 null 在内的所有元素.除了实现 List 接口外,此类还提供一些方法来操作内部 ...
- openID 无效
1.appid 和秘钥一定要是你目前正在测试公众号的数据,如果 appid 和 秘钥是测试账号的,而目标测试业务是在正式的公众号,及时能取到acces——token ,也会报无效的openid 遇到的 ...
- Youtube-dl 简短使用总结
默认下载bestvideo+bestaudio,并通过ffmpeg -c copy output.mp4 简单的封装进mp4格式,而不进行转码. 有时候bestaudio 是opus编码的,但是mp4 ...
- sqlalchemy ORM进阶- 批量插入数据
参考: https://www.jb51.net/article/49789.htm https://blog.csdn.net/littlely_ll/article/details/8270687 ...
- 散列的键值对没初始化时不要用print打印此值,不要用 . 操作符去连接打印 这个值。
31 delete $vertical_alignment{$anonymous}; 32 print $vertical_alignment{$anonymous}."\n&quo ...