hiho1291(逆序思维,并查集)
题目链接:【https://hihocoder.com/problemset/problem/1291】
题意:在《我的世界》游戏中放置沙盒,沙盒为体积为1的正方体,按顺序给你一些坐标,然后问你按上面的顺序在这些坐标上放置沙盒是否合法:判断合法的条件a:沙盒必须放置在地面上或者与另外的沙盒共面(只要共面就可以).b:必须从外部放入某个坐标,也就说要放置的坐标不能被沙盒包围,也不能从地面下放进去PS:(题中说的是极远点可以不经过沙盒和地面到达要放置的点)。
For 20% of the data, 1 <= N <= 1000, 1 <= x, y, z <= 10.
For 100% of the data, 1 <= N <= 100000, 1 <= x, y, z <= 100.
题解:我们先不管条件b,只看条件a,然后判断是否合法。放置完以后我们在再从最后一个点删除,具体做法是:(坐标都在 1 <= x, y, z <= 100.)放置完沙盒以后,我们在100*100*100这个立方体外边在建立一层空座标把上,左右,前后全部覆盖。表示没有被放沙盒,然后我们把所有的空坐标连接在一起放入并查集,然后我们从最后一个点开始删点,删去的点的坐标与上下左右前后(如果下不为地的话)的空左边建立联系放入并查集,然后判断这个删除的坐标与我们在表层建立的左边是不是有联系即可。
#include<bits/stdc++.h>
using namespace std;
const int maxn = ;
int dir[][] = {, , , , , -, , , , -, , , , , , , -, };
int E[maxn][maxn][maxn];
int X[ * * ], Y[ * * ], Z[ * * ];
int F[ * * ];
int Find(int u)
{
if(u == F[u]) return F[u];
else return F[u] = Find(F[u]);
}
void adde(int u, int v)
{
int x = Find(u);
int y = Find(v);
if(x != y) F[x] = y;
}
int main ()
{
int T, n;
scanf("%d", &T);
while(T--)
{
memset(E, , sizeof(E));
bool fg = ;
scanf("%d", &n);
for(int i = ; i <= n; i++)
{
scanf("%d%d%d", &X[i], &Y[i], &Z[i]);
if(!fg) continue;
if(E[X[i]][Y[i]][Z[i]]) fg = ;//重复放木块
E[X[i]][Y[i]][Z[i]] = ;
if(Z[i] == ) continue;//放在地上
int d = ;
for(d = ; d < ; d++)
{
int x = X[i] + dir[d][];
int y = Y[i] + dir[d][];
int z = Z[i] + dir[d][];
if(E[x][y][z]) break;
}
if(d == ) fg = ;
}
if(!fg)
{
printf("No\n");
continue;
} for(int i = ; i <= * * + * + ; i++)
F[i] = i;
for(int i = ; i <= ; i++)//横坐标
for(int j = ; j <= ; j++)//纵坐标
for(int k = ; k <= ; k++)//竖坐标
{
if(!E[i][j][k])
for(int d = ; d < ; d++)
{
int x = i + dir[d][];
int y = j + dir[d][];
int z = k + dir[d][];
if(x >= && x <= && y >= && y <= && z >= && z <= && !E[x][y][z])
adde(i * * + j * + k, x * * + y * + z);
}
}
for(int i = n; i >= ; i--)
{
E[X[i]][Y[i]][Z[i]] = ;
for(int d = ; d < ; d++)
{
int x = X[i] + dir[d][];
int y = Y[i] + dir[d][];
int z = Z[i] + dir[d][];
if(x >= && x <= && y >= && y <= && z >= && z <= && !E[x][y][z])
adde(X[i] * * + Y[i] * + Z[i], x * * + y * + z);
}
int x = Find(X[i] * * + Y[i] * + Z[i]);
int y = Find( * * + * + );
if(x != y)
{
fg = ;
break;
}
}
if(fg) printf("Yes\n");
else printf("No\n");
}
return ;
}
hiho1291(逆序思维,并查集)的更多相关文章
- cf 之lis+贪心+思维+并查集
https://codeforces.com/contest/1257/problem/E 题意:有三个集合集合里面的数字可以随意变换位置,不同集合的数字,如从第一个A集合取一个数字到B集合那操作数+ ...
- 思维+并查集 hdu5652
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5652 题意: 输入T,接下来T个样例,每个样例输入n,m代表图的大小,接下来n行,每行m个数,代表图, ...
- Gym - 101243F Vitamins(思维+并查集)
题意 有三种药丸,白色W>红色R>蓝色B,给你m个约束条件,问你n个药丸的颜色,不能确定颜色输出‘?’ 题解 如果1<2<3,只要找到2就能确定1和3的颜色 如果2=4,只要确 ...
- BNU 4096 逆序 思维题
https://www.bnuoj.com/v3/problem_show.php?pid=4096 对于一个序列a,我们定义它的逆序数为满足a[i]>a[j]且i<j的有序对<i, ...
- 牛客网多校第4场 J Hash Function 【思维+并查集建边】
题目链接:戳这里 学习博客:戳这里 题意: 有n个空位,给一个数x,如果x%n位数空的,就把x放上去,如果不是空的,就看(x+1)%n是不是空的. 现在给一个已经放过数的状态,求放数字的顺序.(要求字 ...
- codeforces 1013B 【思维+并查集建边】
题目链接:戳这里 转自:参考博客 题意:给一个n*m的矩阵,放入q个点,这q个点之间的关系是,若已知这样三个点(x1,y1),(x2,y1),(x1,y2),可以在(x2,y2)处生成一个新的点,对于 ...
- CodeForces - 1243D (思维+并查集)
题意 https://vjudge.net/problem/CodeForces-1243D 有一张完全图,n个节点 有m条边的边权为1,其余的都为0 这m条边会给你 问你这张图的最小生成树的权值 思 ...
- UVALive 6910 Cutting Tree(并查集应用)
总体来说,这个题给的时间比较长,样例也是比较弱的,别的方法也能做出来. 我第一次使用的是不合并路径的并查集,几乎是一种暴力,花了600多MS,感觉还是不太好的,发现AC的人很多都在300MS之内的过得 ...
- [BZOJ4320][ShangHai2006]Homework(根号分治+并查集)
对于<=sqrt(300000)的询问,对每个模数直接记录结果,每次加入新数时暴力更新每个模数的结果. 对于>sqrt(300000)的询问,枚举倍数,每次查询大于等于这个倍数的最小数是多 ...
随机推荐
- 查询PHP版本
查询php版本: phpinfo();
- [AHOI2012]树屋阶梯 题解(卡特兰数)
[AHOI2012]树屋阶梯 Description 暑假期间,小龙报名了一个模拟野外生存作战训练班来锻炼体魄,训练的第一个晚上,教官就给他们出了个难题.由于地上露营湿气重,必须选择在高处的树屋露营. ...
- 阿里iconfont引入方法
原文:iconfont的引入方法 第一步:使用font-face声明字体@font-face {font-family: 'iconfont';src: url('iconfont.eot'); ...
- MSSQL ADO.NET
为什么要学ADO.NET 之前我们所学的只能在查询分析器里查看数据,操作数据,我们让普通用户去学sql,所以我们搭建了一个界面(Web/Winform) 让用户方面的操作数据库中的数据 什么是ADO. ...
- antdVG6随记
g6是一个很棒的可视化工具 目前支持开发者搭建属于自己的图,图分析.图应用.图编辑器 图编辑器可以支持多种图例的创建 G6 是一个简单.易用.完备的图可视化引擎,它在高定制能力的基础上,提供了一系列设 ...
- TypeScript在node项目中的实践
TypeScript在node项目中的实践 TypeScript可以理解为是JavaScript的一个超集,也就是说涵盖了所有JavaScript的功能,并在之上有着自己独特的语法.最近的一个新项目开 ...
- hdu 5326 Work(杭电多校赛第三场)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5326 Work Time Limit: 2000/1000 MS (Java/Others) M ...
- 一文掌握关于Java数据结构所有知识点(欢迎一起完善)
在我们学习Java的时候,很多人会面临我不知道继续学什么或者面试会问什么的尴尬情况(我本人之前就很迷茫).所以,我决定通过这个开源平台来帮助一些有需要的人,通过下面的内容,你会掌握系统的Java学习以 ...
- 海洋CMS v6.53 v6.54命令执行
测试下载地址:https://pan.baidu.com/s/1jHQBKFk 至于分析实在是看的一脸懵逼就不累赘了.直接上exp POST /haiyang/upload/search.php HT ...
- gmail注册时“此电话号码无法用于进行验证”
网上有几个方法,有说不要改默认地点,有说验证时直接写+86手机号,试了以后还是不行. 我的方法:换成IE浏览器,就可以验证了.