并查集,如果只是朴素的路径压缩,那么也就是一句话的事情。

  但是,一般都没有这种仁慈的裸题(假的,多了去了)

  1988:带权并查集,贼鸡儿像Luogu的那道杨威利的并查集(好像是叫银河英雄传说)

  开两个数组,down[x]表示标号为x的箱子下面有多少个箱子,len[x]表示以x点为根(即被压在最底部的箱子)的箱子总个数是多少。

  因此我们在合并时,要把fx的父节点更新为fy,同时还要更新down[fx]和len[fy]。当然,最容易忽略的是把len[fx]清零。

  对于具体的down[x]的更新,只需要在getfather的时候递归操作即可。

  CODE

#include<cstdio>
using namespace std;
const int N=;
int down[N],len[N],father[N],n,p,i,x,y;
char opt;
inline void read(int &x)
{
x=; int flag=; char ch=getchar();
while (ch<''||ch>'') { if (ch=='-') flag=-; ch=getchar(); }
while (ch>=''&&ch<='') x=x*+ch-'',ch=getchar();
x*=flag;
}
inline void write(int x)
{
if (x<) putchar('-'),x=-x;
if (x/) write(x/);
putchar(x%+'');
}
inline int getfather(int k)
{
if (father[k]==k) return k;
int fa=father[k];
father[k]=getfather(father[k]);
down[k]+=down[fa];
return father[k];
}
int main()
{
read(p);
for (i=;i<N;++i)
father[i]=i,len[i]=,down[i]=;
while (p--)
{
while (opt=getchar(),opt!='M'&&opt!='C') opt=getchar();
if (opt=='M')
{
read(x),read(y);
int fx=getfather(x),fy=getfather(y);
if (fx!=fy)
{
father[fx]=fy;
down[fx]+=len[fy];
len[fy]+=len[fx];
len[fx]=;
}
} else read(x),getfather(x),write(down[x]),putchar('\n');
}
return ;
}

  2236:一道基础的并查集维护联通关系的题目。

  每打开一台计算机,就扫描过其他所有的打开的计算机。如果他们之间的距离小于等于d就合并。

  查询的时候并查集查询father即可。

  CODE

#include<cstdio>
using namespace std;
const int N=;
int x[N],y[N],n,d,father[N],i,num,a,b;
bool vis[N];
char opt;
inline void read(int &x)
{
x=; char ch=getchar(); int flag=;
while (ch<''||ch>'') { if (ch=='-') flag=-; ch=getchar(); }
while (ch>=''&&ch<='') x=x*+ch-'',ch=getchar();
x*=flag;
}
inline int getfather(int k)
{
return father[k]==k?k:father[k]=getfather(father[k]);
}
int main()
{
read(n); read(d);
for (i=;i<=n;++i)
read(x[i]),read(y[i]),father[i]=i;
while (scanf("%c",&opt)!=EOF)
{
if (opt=='O')
{
read(num);
if (vis[num]) continue;
vis[num]=;
for (i=;i<=n;++i)
{
if (num==i) continue;
if (vis[i]&&(x[i]-x[num])*(x[i]-x[num])+(y[i]-y[num])*(y[i]-y[num])<=d*d) father[getfather(i)]=getfather(num);
}
} else
{
read(a); read(b);
if (!vis[a]||!vis[b]) { puts("FAIL"); continue; }
if (getfather(a)==getfather(b)) puts("SUCCESS"); else puts("FAIL");
}
}
return ;
}

POJ 1988&&2236的更多相关文章

  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. 常用的第三方模块 requests url

    我们已经讲解了Python内置的urllib模块,用于访问网络资源.但是,它用起来比较麻烦,而且,缺少很多实用的高级功能. 更好的方案是使用requests.它是一个Python第三方库,处理URL资 ...

  2. 团队项目个人进展——Day08

    一.昨天工作总结 冲刺第八天,昨天看了许多关于wx.request的知识,主要测试了OBJECT参数,同时也对https方面有了一定了解 二.遇到的问题 对文档中的内容只是熟悉,理解并运用起来还存在问 ...

  3. SQL Server 合并复制的Article可以指定单个对象的更新方向

    如下所示,这是SQL Server中一个合并复制发布端的Article: 我们可以在Article中选择一个对象,比如这里我们选择MD.Car表,点击鼠标右键,选择"Set Properti ...

  4. Operating System Error Codes

    How To Fix Windows Errors Click here follow the steps to fix Windows and related errors. Instruction ...

  5. NoSQL数据库的认识

    SQL数据库和NoSQL数据库介绍 什么是SQL数据库? 关系型数据库是依据关系模型来创建的数据库.而所谓的关系模型就是“一对一.一对多.多对多”等关系模型,这是一种二维表格模型,因此一个关系型数据库 ...

  6. 服务器安装安装Office2007以上版本注意事项

    1.安装Office2007以上版本.(如安装的是Office2007需安装SaveAsPDFandXPS.exe组件) 2.确认网站在IIS内使用的登录用户.(如图所示用户为IUSR,下面操作以此用 ...

  7. 'javac' 不是内部或外部命令,也不是可运行的程序

    今天在命令行中运行javac命令时发现 但是运行java命令却可以 查找jdk的安装路径发现,安装目录里面同时有jdk的文件夹和jre的文件夹 查看了jdk的目录发现jdk目录中也有一个jre文件夹 ...

  8. 利用Chrome浏览器的开发者工具截取整个页面

    ①打开Chrome浏览器的开发者工具: 快捷键: command + Alt + I (Mac). Ctrl + shift + I (Windows) 或者: 鼠标右键 -> 弹出菜单中选择 ...

  9. SDN期末作业——负载均衡

    作业链接 期末作业 1.负载均衡程序 代码 2.演示视频 地址 3.小组分工 小组:incredible five 构建拓扑:俞鋆 编写程序:陈绍纬.周龙荣 程序调试和视频录制:陈辉.林德望 4.个人 ...

  10. 阿里八八Alpha阶段Scrum(5/12)

    今日进度 叶文滔: 与添加日程界面完成界面对接. 问题困难:发现浮动按钮拖曳存在BUG,无法正确判断拖曳与点击事件,已经修复为普通悬浮按钮. 林炜鸿: 绘制完成添加日程界面. 李嘉群: 1.尝试有关用 ...