BZOJ4466 [Jsoi2013]超立方体
Description
定义“超立方图”为:有\(2^k\)个点,以\(k\)位二进制数编号,两个点之间有边当且仅当它们的编号恰有一位不同。给出一个图,问它是否与“超立方图”同构。如果是,输出任意一种点与点的对应方案。(\(n \leq 32768\))
Solution
先判断点数和边数、每个点的度数。
之后假设同构,求出同构方案后再check一遍。
显然超立方图的每个点都是对称的,于是我们任取一个点作为0,与它相邻的\(k\)个点编号为\(2^i, i=0\dots k-1\)。
之后,所有与\(0\)距离为\(2\)的点一定恰好与两个距离为\(1\)的点连边,且它的编号为这两个点编号的bit or。
与\(0\)距离为\(3\)的点的编号是所有与它相连的已知编号的点(距离一定是\(2\))的bit or。
以此类推。bfs一遍即可。
最后不要忘记check。
Code
#include <algorithm>
#include <cstdio>
#include <cstring>
const int N = 33000;
const int M = 2000050;
int pre[N], nxt[M], to[M], cnt, deg[N];
int A[N], que[N];
bool vis[N];
inline void addEdge(int x, int y) {
++deg[x];
nxt[cnt] = pre[x];
to[pre[x] = cnt++] = y;
}
int main() {
int T;
scanf("%d", &T);
while (T--) {
int n, m, x, y;
scanf("%d%d", &n, &m);
int k = 1;
while ((1 << k) < n) ++k;
memset(pre, -1, sizeof pre);
memset(deg, 0, sizeof deg);
cnt = 0;
while (m--) {
scanf("%d%d", &x, &y);
addEdge(x, y);
addEdge(y, x);
}
bool ok = true;
for (int i = 0; i < n; ++i)
ok = ok && deg[i] == k;
if (!ok) { puts("-1"); continue; }
memset(A, 0, sizeof A);
memset(vis, 0, sizeof vis);
int hd = 0, tl = 0;
vis[0] = true;
for (int i = pre[0], j = 1; ~i; i = nxt[i], j <<= 1)
A[que[tl++] = to[i]] = j;
while (hd < tl) {
int x = que[hd++];
vis[x] = true;
for (int i = pre[x]; ~i; i = nxt[i])
if (!vis[to[i]]) {
if (!A[to[i]]) que[tl++] = to[i];
A[to[i]] |= A[x];
}
}
memset(vis, 0, sizeof vis);
for (int i = 0; i < n; ++i) vis[A[i]] = true;
for (int i = 0; i < n; ++i) ok = ok && vis[i];
if (!ok) { puts("-1"); continue; }
for (int i = 0; i < n; ++i) {
for (int j = 0; j < k; ++j) vis[A[i] ^ (1 << j)] = false;
for (int j = pre[i]; ~j; j = nxt[j]) vis[A[to[j]]] = true;
for (int j = 0; j < k; ++j) ok = ok && vis[A[i] ^ (1 << j)];
}
if (!ok) { puts("-1"); continue; }
for (int i = 0; i < n; ++i)
printf("%d ", A[i]);
puts("");
}
}
BZOJ4466 [Jsoi2013]超立方体的更多相关文章
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
- bzoj4466 超立方体
Description 超立方体是立方体在高维空间内的拓展(其在 2 维情况下退化为正方形,1维情况下退化成线段).在理论计算机科学领域里,超立方体往往可以和 2 进制编码联系到一起.对理论计算机科学 ...
- bzoj 4459: [Jsoi2013]丢番图 -- 数学
4459: [Jsoi2013]丢番图 Time Limit: 10 Sec Memory Limit: 64 MB Description 丢番图是亚历山大时期埃及著名的数学家.他是最早研究整数系 ...
- bzoj 4465: [Jsoi2013]游戏中的学问
4465: [Jsoi2013]游戏中的学问 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 121 Solved: 59[Submit][Statu ...
- [Bzoj5177][Jsoi2013]贪心的导游(主席树)
5177: [Jsoi2013]贪心的导游 Time Limit: 40 Sec Memory Limit: 512 MBSubmit: 32 Solved: 15[Submit][Status] ...
- BZOJ_4459_[Jsoi2013]丢番图_数学+分解质因数
BZOJ_4459_[Jsoi2013]丢番图_数学+分解质因数 Description 丢番图是亚历山大时期埃及著名的数学家.他是最早研究整数系数不定方程的数学家之一. 为了纪念他,这些方程一般被称 ...
- 「JSOI2013」贪心的导游
「JSOI2013」贪心的导游 传送门 多次询问区间内%一个数的最大值 我们不妨设这个数为M_sea 值域比较小所以考虑分块维护. 我们观察到对于给定的一个 \(p\) ,函数 \(y = x \% ...
- 「JSOI2013」哈利波特和死亡圣器
「JSOI2013」哈利波特和死亡圣器 传送门 首先二分,这没什么好说的. 然后就成了一个恒成立问题,就是说我们需要满足最坏情况下的需求. 那么显然在最坏情况下伏地魔是不会走回头路的 因为这显然是白给 ...
- 「JSOI2013」侦探jyy
「JSOI2013」侦探jyy 传送门 个人感觉我写的复杂度不够优秀啊,但是好像没有别的办法了... 我们枚举每个点,考虑这个点能不能不发生. 首先我们从这个点开始,在反图上面 \(\text{BFS ...
随机推荐
- python pip安装模块提示错误failed to create process
python pip安装模块提示错误failed to create process 原因: 报这个错误的原因,是因为python的目录名称或位置发生改动. 解决办法: 1.找到修改python所在的 ...
- Linux CentOS7系统探索
这两天,突发奇想,想着用着微软家的windows系统很多年了,也想尝试一下其他的操作系统.很快的就想到了Linux操作系统,它不是面向用户的,而是面向服务器的,在服务器端的市场中占了很大的市场份额,备 ...
- Ubuntu16.04 / OpenCV / Python 源码安装
为什么需要源码安装? 1. 对 Python 版的 OpenCV,Ubuntu 有两种安装方式: 源码安装:官网(https://opencv.org/releases.html)下载源代码,在机器上 ...
- OSS和CDN配置使用
Oss和cdn目的就是: 1 把资源文件和程序分开存储 2 可以通过cdn缓存加速 下面介绍阿里云OSS和CDN如何配制 一 阿里云开通子RAM账户 1 不使用主账号访问OSS,需要创建子RA ...
- 6.关于Xamarin Android对APK包大小的处理
降低学习成本是每个.NET传教士义务与责任. 建立生态,保护生态,见者有份. 对于apk 包的大小大家都是很敏感的,虽然现在安卓手机的性能和存储越来越厉害了.本着能少一点是一点的态度,我们还是要深入理 ...
- android图片压缩总结
一.bitmap 图片格式介绍 android中图片是以bitmap形式存在的,那么bitmap所占内存,直接影响到了应用所占内存大小,首先要知道bitmap所占内存大小计算方式: bitmap内存大 ...
- Linq基础知识小记四之操作EF
1.EF简介 EF之于Linq,EF是一种包含Linq功能对象关系映射技术.EF对数据库架构和我们查询的类型进行更好的解耦,使用EF,我们查询的对象不再是C#类,而是更高层的抽象:Entity Dat ...
- 【数组】Game of Life
题目: According to the Wikipedia's article: "The Game of Life, also known simply as Life, is a ce ...
- Postman—命令执行脚本及生成报告
前言 前面的应用中,都是在postman图形界面工具里面进行测试,但是有时候我们需要把测试脚本集成到CI平台,或者在非图形界面的系统环境下进行测试,那么我们该如果处理呢 通过newman来执行post ...
- Java 并行编程!
多核处理器现在已广泛应用于服务器.台式机和便携机硬件.它们还扩展到到更小的设备,如智能电话和平板电脑.由于进程的线程可以在多个内核上并行执行,因此多核处理器为并发编程打开了一扇扇新的大门.为实现应用程 ...