牛客国庆集训派对Day5 A.璀璨光滑
首先我们可以确认 1的值一定是0
题目要求的是 有边的两个点所代表的值二进制有一位不同(即有边相连的两个值二进制所包含的1的个数相差为1)
所以我们通过他给你的图进行BFS 把原图分为一圈一圈的 并且先给每一个点赋一个初值
这样每一圈内的值二进制所包含的1的个数往外递增且同一圈内值二进制所包含的1的个数是相等的 目前我们就得到了题目的一个可行解
题目追加要求最小字典序 我们发现把这2^n个数二进制表示出来 则有n列 任意两列之间的交换是不会影响值二进制中1的个数且符合边关系的
即交换二进制中的任意两列不会影响答案的正确性
所以我们就可以通过排列这个二维数组的字典序来得到 答案的最小字典序
#include<bits/stdc++.h>
using namespace std; inline void splay(int &v)
{
v = ;
char c = ;
int p = ;
while (c < '' || c > '')
{
if (c == '-')
{
p = -;
}
c = getchar();
}
while (c >= '' && c <= '')
{
v = (v << ) + (v << ) + c - '';
c = getchar();
}
v *= p;
}
const int N = ;
int n, m, dp[N], q[N], fir[N], sz, to[], nxt[], vis[N], inque[N];
struct Q
{
bool s[N];
int id;
} f[];
void add(int x, int y)
{
nxt[++sz] = fir[x], fir[x] = sz, to[sz] = y;
}
bool cmp(Q a, Q b)
{
for (int i = ; i <= ( << n); i++)
{
if (a.s[i] != b.s[i])
{
return a.s[i] > b.s[i];
}
}
return true;
}
int main()
{
#ifdef CX_TEST
freopen("E:\\program--GG\\test_in.txt", "r", stdin);
#endif
int T;
cin >> T;
while (T--)
{
cin >> n >> m;
for (int i = ; i <= ( << n); i++)
{
inque[i] = vis[i] = fir[i] = dp[i] = ;
}
sz = ;
for (int i = , u, v; i <= m; i++)
{
splay(u), splay(v);
add(u, v), add(v, u);
}
for (int i = ; i <= ( << n); i++)
{
dp[i] = ;
}
int t = ;
vis[] = ;
int hd = , tl = ;
for (int u = fir[]; u; u = nxt[u])
{
dp[to[u]] = << (t++);
q[++tl] = to[u];
}
while (hd != tl)
{
int v = q[++hd];
vis[v] = ;
for (int u = fir[v]; u; u = nxt[u])
{
if (!vis[to[u]])
{
dp[to[u]] |= dp[v];
if (!inque[to[u]])
{
q[++tl] = to[u];
inque[to[u]] = ;
}
}
}
}
for (int i = ; i < n; i++)
{
f[i].id = i;
}
for (int i = ; i <= ( << n); i++)
{
for (int j = ; j < n; j++)
{
f[j].s[i] = dp[i] >> j & ;
}
}
sort(f, f + n, cmp);
for (int i = ; i <= ( << n); i++)
{
int ret = ;
for (int j = ; j < n; j++)
{
if (f[j].s[i])
{
ret |= ( << j);
}
}
printf("%d%c", ret, " \n"[i == ( << n)]);
}
}
}
牛客国庆集训派对Day5 A.璀璨光滑的更多相关文章
- 2019牛客国庆集训派对day5
2019牛客国庆集训派对day5 I.Strange Prime 题意 \(P=1e10+19\),求\(\sum x[i] mod P = 0\)的方案数,其中\(0 \leq x[i] < ...
- 牛客国庆集训派对Day5 Solution
A 璀璨光滑 留坑. B 电音之王 蒙特马利大数乘模运算 #include <bits/stdc++.h> using namespace std; typedef long ...
- 牛客国庆集训派对Day5 数论之神
题目描述 终于活成了自己讨厌的样子. 这是她们都还没长大的时候发生的故事.那个时候,栗子米也不需要为了所谓的爱情苦恼. 她们可以在夏日的午后,花大把的时间去研究生活中一些琐碎而有趣的事情,比如数论. ...
- 牛客国庆集训派对Day6 A Birthday 费用流
牛客国庆集训派对Day6 A Birthday:https://www.nowcoder.com/acm/contest/206/A 题意: 恬恬的生日临近了.宇扬给她准备了一个蛋糕. 正如往常一样, ...
- 牛客国庆集训派对Day1 L-New Game!(最短路)
链接:https://www.nowcoder.com/acm/contest/201/L 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 1048576K,其他语言20 ...
- 牛客国庆集训派对Day4 J-寻找复读机
链接:https://www.nowcoder.com/acm/contest/204/J 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 1048576K,其他语言20 ...
- 牛客国庆集训派对Day4 I-连通块计数(思维,组合数学)
链接:https://www.nowcoder.com/acm/contest/204/I 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 1048576K,其他语言20 ...
- 牛客国庆集训派对Day1-C:Utawarerumono(数学)
链接:https://www.nowcoder.com/acm/contest/201/C 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 1048576K,其他语言20 ...
- 牛客国庆集训派对Day2 Solution
A 矩阵乘法 思路: 1° 牛客机器太快了,暴力能过. #include <bits/stdc++.h> using namespace std; #define N 5000 in ...
随机推荐
- Autofac实现AOP拦截
本文主要是详解一下在ASP.NET Core中,采用替换后的Autofac来实现AOP拦截. Aspect Oriented Programming(AOP),面向切面编程,是一个比较热门的话题.AO ...
- php使用装饰模式无侵入式加缓存
<?php namespace App\Services; use Illuminate\Support\Facades\Log; use Illuminate\Support\Facades\ ...
- powerDesigner连接数据库连接失败
powerDesigner连接数据库总是提示连接失败 原因是这个软件不能使用64位的jdk只能使用32位的jdk 在软件安装文件夹根目录下创建start.bat Set JAVA_HOME=E:\Ja ...
- 创建Maven Web项目时很慢解决办法
点击加号,Name输入archetypeCatalog,Value输入internal archetypeCatalog表示插件使用的archetype元数据,不加这个参数时默认为remote,loc ...
- Java服务,内存OOM问题如何快速定位? (转)
转自:公众号 架构师之路 问题:有一个Java服务出现了OOM(Out Of Memory)问题,定位了好久不得其法,请问有什么好的思路么? OOM的问题,印象中之前写过,这里再总结一些相对通用的方 ...
- Java 子类继承父类成员中的问题
之前搞错了,变量没有“重写”一说,只有方法才能被“重写”.如果我们在子类中声明了一个和父类中一样的变量,那么实际的情况是,子类的内存堆中会有类型和名字都相同的两个变量. 现在考虑一种情况,如下所示,我 ...
- mybaits 在test判断数字,或者数字型字符串时注意事项
1.在test中判断传入值为0的Integer或者Long时,mybaits会将其视为null 解决方法: 把Integer/Long改为String类型. status!=null and stat ...
- SqlSugar
SqlSugar 官网 SqlSugar 源码 SqlSugar NuGet
- spark精华面试题
1.driver的功能是什么? 1)一个Spark作业运行时包括一个Driver进程,也是作业的主进程,具有main函数,并且有SparkContext的实例,是程序的人口点: 2)功能:负责向集群申 ...
- js 获取当前月份 第一天和最后一天
js 获取当前月份 第一天和最后一天 var now = new Date(); //当前日期 var nowMonth = now.getMonth(); //当前月 var nowYear = n ...