发现n维超立方体有2^n个定点,2^(n-1)*n条棱,每个点的度数为n

发现只有在二进制表示下 只有一位不同的两个点之间才有边

于是check上面那三个点可以先判断-1

用id[i] 表示 i 号点的标号

然后进行标号把原来的0号点标为0,与它相邻的点分别标为2,4,8,16....

从与0号点相邻的点开始bfs,每个点记录dis[i],表示i号点与0号点的距离+1(为了方便 dis[0] = 1)

对于与 i 相邻的点 j ,如果dis[j] == dis[i] + 1 ,id[j] |= id[i]

最后check每个边两边的点是否合法,是否有重复的标号

#include<bits/stdc++.h>
#define MAXN 32800
#define MAXM 1000005
using namespace std;    int Q,n,m;
int Base,tmp_base;
inline int read(){register char ch = getchar();while(!isdigit(ch)) ch = getchar();register int rtn = 0;while(isdigit(ch))    rtn = rtn*10 + ch - '0' , ch = getchar();return rtn;
}
//=======================================
struct t1{int to,nxt;
}edge[MAXM<<1];   int cnt_edge;
int dex[MAXN];
int fst[MAXN];
inline void addedge(int x,int y){++dex[x] , ++dex[y];edge[++cnt_edge].to = y;edge[cnt_edge].nxt = fst[x];fst[x] = cnt_edge;edge[++cnt_edge].to = x;edge[cnt_edge].nxt = fst[y];fst[y] = cnt_edge;
}int id[MAXN];
int dis[MAXN];queue<int> q;inline void bfs(){while(!q.empty()){int now = q.front();q.pop();for(int tmp = fst[now];tmp;tmp=edge[tmp].nxt){int aim = edge[tmp].to;if(!dis[aim]){dis[aim] = dis[now] + 1;q.push(aim);id[aim] = id[now];}else{if(dis[aim] == dis[now] + 1)id[aim] |= id[now];}}}
}int vis[MAXN];
inline void check(){
//  __builtin_popcount()memset(vis,0,sizeof vis);for(int i=0;i<n;++i){if(vis[id[i]])  return void(puts("-1"));vis[id[i]] = 1;for(int tmp = fst[i];tmp;tmp=edge[tmp].nxt){if(__builtin_popcount(id[i]^id[edge[tmp].to]) ^ 1)return void(puts("-1"));}}for(int i=0;i<n;++i)    printf("%d ",id[i]);puts("");
}int main(){
//  freopen("1.in","r",stdin);Q = read();while(Q--){memset(fst,0,sizeof fst);memset(edge,0,sizeof edge);memset(id,0,sizeof id);memset(dex,0,sizeof dex);memset(dis,0,sizeof dis);cnt_edge = 0;n = read() , m = read();for(Base = 0 , tmp_base = 1;tmp_base<n;++Base , tmp_base<<=1);for(int i=1;i<=m;++i)  addedge(read(),read());if((tmp_base^n)||(m^((n/2)*Base))){puts("-1");continue;}int flag = 0;for(int i=0;i<n;++i)   if(dex[i]^(Base)){puts("-1");flag = 1;break;}if(flag)    continue;id[0] = 0;dis[0] = 1;for(int tmp = fst[0],i = 1;tmp;tmp = edge[tmp].nxt , i<<=1)id[edge[tmp].to] = i , q.push(edge[tmp].to) , dis[edge[tmp].to] = 2;bfs();check();}return 0;
}

BZOJ 4466 [Jsoi2013]超立方体【模拟相关推荐

  1. BZOJ 5326 [JSOI2017]博弈 (模拟费用流、线段树)

    题目链接 https://www.lydsy.com/JudgeOnline/problem.php?id=5326 题解 终于成为第8个A掉这题的人--orz tzw神仙早我6小时 本以为这东西常数 ...

  2. BZOJ 4946: [Noi2017]蔬菜 模拟费用流

    title BZOJ 4946 LUOGU 3826 简化题意: 定义了一种蔬菜为:\(ai,si,ci,xi\),意思是蔬菜的价格为 \(a_i\),第一份卖出时价格为 \(a_i+s_i\),一共 ...

  3. (全网最详细!)bzoj 2548 灭鼠行动 模拟 解题报告

    Description 最近,有一些繁殖力很强的老鼠在下水道非常猖獗,灭鼠特工队正在计划消灭这些老鼠.下水道只有东西方向和南北方向的管道,如图所示. 灭鼠特工队的队员拥有强大的武器.他们将在某些时刻t ...

  4. bzoj 1024 [SCOI2009]生日快乐——模拟

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1024 可以枚举这边放多少块.那边放多少块. 注意精度.不要每次用x*y/base算有多少块, ...

  5. BZOJ 4480 [JSOI2013] 快乐的jyy

    思路 两个字符串都插入回文自动机中(每次重置last) 最后统计两个right集合的大小就好了 代码 #include <cstdio> #include <algorithm> ...

  6. bzoj 4480: [Jsoi2013]快乐的jyy

    题意: 给两个串,求两个相同的回文串,在两个串中出现过,位置不同算不同.求方案数. 题解: 回文自动机裸题,当然bzoj3676更裸,记得有一篇博客写的很好,关于回文自动机的,但是忘了是哪篇,好像从h ...

  7. bzoj 4461: [Jsoi2013]美丽家园

    千分矩阵乘法题 dp[i][j]表示第i行,j状态是否可行 矩乘就好,需要高精度 #include<bits/stdc++.h> using namespace std; inline v ...

  8. 【题解】bzoj 4478 [Jsoi2013]侦探jyy

    原题传送门 弱智搜索题 我们就枚举每个点,先判断它是否必须发生,如果没有必须发生,开始搜索它的祖先,如果祖先中有必须发生的,那么它就必须发生,如果祖先中没有必须发生的,那么搜索所有入度为0的点(除了它 ...

  9. bzoj 4479: [Jsoi2013]吃货jyy 欧拉回路+状压dp

    题意 世界上一共有N个JYY愿意去的城市,分别从1编号到N.JYY选出了K个他一定要乘坐的航班.除此之外,还有M个JYY没有特别的偏好,可以乘坐也可以不乘坐的航班. 一个航班我们用一个三元组(x,y, ...

最新文章

  1. 分布式锁用 Redis 还是 Zookeeper?
  2. node.js之path模块的使用
  3. transforms函数查询
  4. Problem E: 零起点学算法25——判断是否直角三角形
  5. 【基础部分】之FTP相关配置
  6. DVP,LVDS和MIPI
  7. js粘贴板为什么获取不到图片信息_【第1829期】复制黏贴上传图片和跨浏览器自动化测试...
  8. 1、RabbitMQ初探
  9. QT5.13.1安装教程
  10. 编码 8421BCD 码的故事
  11. java自动发送qq_如何定时批量发送qq消息就是帮助我们自动的发送qq消息
  12. 复旦邱锡鹏:语言模型即服务,走向大模型的未来
  13. 80x86 汇编语言,大写变小写,小写变大写,数字原样输出
  14. Mac Word 公式自动编号与交叉引用
  15. MSSQL 数据库邮件配置
  16. 微软正式发布Chromium Edge开发预览版
  17. Linux学习笔记(22.1)——基于SPI + Regmap + IIO的ICM20608设备驱动
  18. html中如果设置颜色为半透明状态,css如何利用transparent属性设置透明度?
  19. 初涉Java World (思维导图总结)
  20. 记忆计算机课,记忆人脑就计算机课件.ppt

热门文章

  1. CMake 下载与安装
  2. 访问受限msn space 空间的又一个方法
  3. Echarts图表大小自适应浏览器窗口大小
  4. 前端开发的工具化与工程化
  5. STM32F1系列ADC电压采集
  6. Delphi官方文档
  7. 《摩诃般若波罗蜜多心经》 玄奘 译
  8. OrCAD导入元件原理图符号流程
  9. 信号完整性基础04:串扰(2)
  10. WPF优化DrawingContext.DrawLine