璀璨光滑【牛客】【题意解析+BFS+贪心】

2023-11-05

题目链接



中文题意,表面平静,实则暗藏玄机,而打开本题的突破口,也确确实实就在于题目的描述:

    也就是说,这张图的边的数目是确定的,并且这是一张连通图,而且图上的2^n个点每个点连接出去的边的数目都是n条,因为每个数都刚好只与n个数在二进制位上差1。

    那么,这张图的形态是固定的,好了,现在开始想解决问题的方法。

    于是乎,我们可以贪心的,为了让字典序是最小的,所以1号点一定选的是点权0。那么接下去与1号点相连的点肯定是2^{x}, 0 \leq x \leq n -1,那么我们不妨先假设给他们赋值,就先随便的给他们找一组可行解,于是,我们可以确定接下去的整张图,因为其他的点可以由这几个点得来,而且一个点从两个已知点权的点到达之后,该点的点权也是唯一确定的。所以,我们利用分层图的思想,这里就可以用bfs的方式来往下跑下去了。

    现在,我们确定了一组解,但这组解不一定是最贪心的,现在我们想字典序最小的办法,可以看到,二进制中第ith位的n个数如果相互交换位置,是不会影响图的形状的,所以我们可以在这里贪心。

    对于n个二进制位,我们尽可能的让点的点权是靠前的,并且不能改变图的形状,所以我们可以将每一个二进制位上有哪些点记录下来,让点的标号小的尽可能的拿小的点权来进行操作。

#include <iostream>
#include <cstdio>
#include <cmath>
#include <string>
#include <cstring>
#include <algorithm>
#include <limits>
#include <vector>
#include <stack>
#include <queue>
#include <set>
#include <map>
#include <bitset>
#include <unordered_map>
#include <unordered_set>
#define lowbit(x) ( x&(-x) )
#define pi 3.141592653589793
#define e 2.718281828459045
#define INF 0x3f3f3f3f3f3f3f3f
#define HalF (l + r)>>1
#define lsn rt<<1
#define rsn rt<<1|1
#define Lson lsn, l, mid
#define Rson rsn, mid+1, r
#define QL Lson, ql, qr
#define QR Rson, ql, qr
#define myself rt, l, r
using namespace std;
typedef unsigned long long ull;
typedef unsigned int uit;
typedef long long ll;
const int maxN = 27e4 + 7;
int N, _UP, M, ans[maxN], vis[maxN], que[maxN], top, tail;
vector<int> E[maxN];
bitset<maxN> a[19];
bool cmp (bitset<maxN> e1, bitset<maxN> e2) { for(int i=1; i<=_UP; i++) if(e1.test(i) ^ e2.test(i)) return e1.test(i) > e2.test(i); return false; }
int main()
{
    int T; scanf("%d", &T);
    while(T--)
    {
        scanf("%d%d", &N, &M); _UP = 1 << N;  //M == N * (1 << N) / 2
        for(int i=1; i<=_UP; i++) { E[i].clear(); vis[i] = ans[i] = 0; }
        for(int i=0; i<N; i++) a[i].reset();
        for(int i=1, u, v; i<=M; i++)
        {
            scanf("%d%d", &u, &v);
            E[u].push_back(v); E[v].push_back(u);
        }
        vis[1] = 2; top = tail = 0;
        int len = (int)E[1].size(), u, v;
        for(int i=0; i<len; i++)
        {
            v = E[1][i];
            ans[v] = 1 << i;
            vis[v] = 2;
            que[tail++] = v;
        }
        while(top < tail)
        {
            u = que[top++];
            len = (int)E[u].size();
            for(int i=0; i<len; i++)
            {
                v = E[u][i];
                if(vis[v] == 2) continue;
                ans[v] |= ans[u];
                vis[v]++;
                if(vis[v] == 1) que[tail++] = v;
            }
        }
        for(int i=2; i<=_UP; i++)
        {
            for(int j=0; j<N; j++)
            {
                if((ans[i] >> j) & 1) a[j].set(i);
            }
        }
        sort(a, a + N, cmp);
        for(int i=1, val; i<=_UP; i++)
        {
            val = 0;
            for(int j=0; j<N; j++) if(a[j].test(i)) val |= 1 << j;
            printf("%d%c", val, i == _UP ? '\n' : ' ');
        }
    }
    return 0;
}

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

璀璨光滑【牛客】【题意解析+BFS+贪心】 的相关文章

  • 汽车加油行驶问题【网络流24题】【可以使用BFS】

    题目链接 这道题虽然说是网络流24题中的一题 但是我的第一想法确实去用BFS 跑一个最小的花费 但是由于加油的钱 向后走的钱 开设一个新的加油站的钱是不固定的 所以 我们需要进行相应的判断 跑所有可以达到终点的值去比较大小 include
  • [NOI2010]超级钢琴【RMQ+贪心+堆】

    题目链接 超级棒的一道题 解这道题 需要分一下几步来看 取的是连续段 我们可以对每个可能起点去知道它的最大可能解 起点begin 最大可行解一定是begin L 1 begin R 1中的一个 如果每次都是取最大的话 那么下一个同起点的一定
  • New Year and Social Network【Hello 2020 F】【拓扑+LCA+贪心】

    题目链接 看到比赛的时候zzq大聚聚用了LCT做的 在线 首先 我们可以发现 两棵大小相同 构造形状不同的树 一定是可以用另一棵树的边来维持这棵树上的每一个点的相互连通性的 我的做法 就是基于这样展开的 我们有T1 T2两棵树 现在我们要去
  • 【4月第二周学习记录】数据结构与算法王卓-第六章图-图的遍历(邻接矩阵与邻接表,DFS与BFS)

    1 图的遍历基本思路与方法 图的遍历的定义与visited数组 常用的遍历方法 深度优先搜索遍历 Depth First Search DFS 广度优先搜索遍历 Breadth First Search BFS 2 深度优先搜索遍历 Dep
  • 2020蓝桥杯模拟——长草

    1 题目描述 小明有一块空地 他将这块空地划分为 n 行 m 列的小块 每行和每列的长度都为 1 小明选了其中的一些小块空地 种上了草 其他小块仍然保持是空地 这些草长得很快 每个月 草都会向外长出一些 如果一个小块种了草 则它将向自己的上
  • 【2019年ICPC南昌网络赛】Distance on the tree【DFS+线段树合并(可持久化线段树)】

    题目链接 DSM Data Structure Master once learned about tree when he was preparing for NOIP National Olympiad in Informatics i
  • 层序遍历与BFS广度(宽度)遍历搜索算法(C++)

    算法竞赛 file author jUicE g2R qq 3406291309 彬 bin 必应 一个某双流一大学通信与信息专业大二在读 brief 一直在算法竞赛学习的路上 copyright 2023 8 COPYRIGHT 原创技术
  • Catowice City【Codeforces 1248 F】【BFS】

    Codeforces Round 594 Div 2 F 一开始是听闻有人说这是一道Tarjan好题 然后就点进来做了 但是想来想去 却想了个另类的法子 我们可以看到 如果N个人都要选择的话 那么每个人都只能是审判者 或者是参赛者 所以 我
  • BZOJ4345 [POI2016]Korale

    在病房里日题真是一种独特的体验 首先考虑求第一问 我们先把所有元素排序 我们用优先队列维护选数的集合 对每个集合维护集合里的元素的和v和最后一个元素 即最大的元素 lst 初始的时候我们把只包含最小元素的集合推入队列 那么我们取出一个队头元
  • 【算法学习笔记】17:DFS与BFS

    1 DFS 深度优先搜索常用于解决需要给出所有方案的问题 因为它的搜索顺序就是能够得到一个完整的搜索路径 方案 后回退再去搜索其它的方案 1 1 例题 排列数字 由于要求所有排列的方案 可以每次从 1 n 1 n 1 n里拿一个数字 然后记
  • 天梯题集——愿天下有情人都是失散多年的兄妹(隐藏条件)

    愿天下有情人都是失散多年的兄妹 解题思路 利用结构体读入每个 ID 下数据 隐藏条件 标记父母的性别 卡死个人 假设判断 a b 是否可通婚 同性输出 Never Mind 不同性 bfs标记 a 的五代内的祖先 check检查 b 五代内
  • 贪心——字典序最小问题

    https vjudge net problem POJ 3617 题目简单理解就是 给定长度为N的字符串为S 要构造一个长度为N的字符串T 起初 T 是一个空串 随后反复进行下列任意操作 从S的头部删除一个字符串 加到T的尾部 从S的尾部
  • LeetCode-1827. 最少操作使数组递增【贪心,数组】

    LeetCode 1827 最少操作使数组递增 贪心 数组 题目描述 解题思路一 简单暴力 解题思路二 优化1 ans是操作数 mx是当前最大元素 mx无论如何会依次递增 解题思路三 优化2 遇到小的数就pre 1 否则变为num 题目描述
  • HDU--1050:Moving Tables (贪心)

    1 题目源地址 http acm hdu edu cn showproblem php pid 1050 2 解题思路 将每个输入的起始房间和结束房间转换为房间前面的区间 按区间起始位置从小到大排序 首先取第一个区间 后续如果有区间的起始位
  • BZOJ4868 [Shoi2017]期末考试

    YY一下的话感觉代价关于最晚出分时间是一个单峰函数 三分最晚的出分时间 然后贪心一下算代价就行 如果A gt B就只用B就行了 要不然的话出分时间小于当前限制的都可以随便往后调直到到达限制 那么先尽量用A 调不到限制以内的再用B即可 inc
  • BFS(广度优先算法)——判断无向简单图中任意两点是否连通

    include
  • 仙岛求药 —— dfs 与 bfs求解

    样例输入1 8 8 样例输出1 10 样例输入2 9 6 样例输出2 1 dfs ps 使用dfs会运行超时 30组测试数据只能通过部分 其实这种最短路径 最少操作的问题最好还是靠bfs解决 import java util Scanner
  • 编程之美2015初赛第二场AB

    题目1 扑克牌 时间限制 2000ms 单点时限 1000ms 内存限制 256MB 描述 一副不含王的扑克牌由52张牌组成 由红桃 黑桃 梅花 方块4组牌组成 每组13张不同的面值 现在给定52张牌中的若干张 请计算将它们排成一列 相邻的
  • [SDOI2012]拯救小云公主【bfs+二分答案】

    题目链接 正难则反 要直接求从起点到终点的最大距离 不妨反过来求最小的可以阻止骑士从起点到终点的对于全体圆的最小半径 那么 就是阻止从左上角到右下角的所有相交圆 于是 就是要变成没有从左上角到右下角的相交圆才可以 那么不妨跑一个bfs来判断
  • [POI2007]砝码Odw

    看这数据范围就不太可DP的样子 考虑贪心 首先注意到题目里有对于任意两个砝码其中一个是另一个质量整数倍的条件 所以砝码质量的种类不超过log INF 考虑按质量从小到大把砝码往容器里放 这样的话所有的砝码和容器的质量都可以除以当前砝码质量然

随机推荐

  • 在Linux上搭建JAVAEE的开发环境

    1 安装JDK 1 下载安装包 jdk 8u121 linux x64 tar gz 2 把JDK安装包上传到Linux系统中的 opt 目录下 通过xftp软件连接上Linux 然后双击要上传的安装包即可上传 3 解压JDK安装包 命令
  • 逻辑漏洞归纳总结

    Web安全渗透方向 三大核心 输入输出 登录体系 权限认证 典型的web漏洞 注入 跨站 上传 代码执行等属于输入输出这个层级 这也是OWASP早期比较侧重的 近年来 像越权漏洞 逻辑绕过 接口安全等逐渐增多 这些属于登录体系和权限认证这个
  • LaWGPT基于中文法律知识的大语言模型_初步安装

    准备代码 创建环境 下载代码 git clone git github com pengxiao song LaWGPT git cd LaWGPT 创建环境 conda create n lawgpt python 3 10 y cond
  • 【高效办公】程序员专用云笔记推荐

    一 参考资料 推荐几款好用的云笔记软件 云 社区 腾讯云 Markdown基本语法 简书 Markdown菜鸟教程
  • webpack-serve 的使用

    webpack serve 官方已经不维护了 还请继续食用webpack dev server 基本情况 仓库地址 配合webpack4食用最佳 在webpack3及以前的版本会有帮助信息提示 因为热加载使用的是WebSockets 所以在
  • 基于Arduino的循迹小车搭建

    材料准备 我做的是双层的循迹小车 这个网上有套件可以直接购买 到了之后组装是比较简单的 如果有不会组装的去bilbil上找一下教程也是很方便的 https www bilibili com video BV1Pe4y197DN spm id
  • 工作流Activiti7整合SpringBoot使用

    前言 一个软件系统中具有工作流的功能 我们把它称为工作流系统 一个系统中工作流的功能是什么 就是对系统的业务流程进行自动化管理 所以工作流是建立在业务流程的基础上 所以一个软件的系统核心根本上还是系统的业务流程 工作流只是协助进行业务流程管
  • 8086的写总线周期

    http www2 zzu edu cn qwfw wjylcai list asp id 127 写总线周期用来完成对存储器或I O端口的一次写操作 1 T1状态 总线周期的第一个时钟周期主要用于输出存储器地址或I O地址 如果M IO
  • android 右边充满 左边自适应,RelativeLayout中的格局,自适应宽度布局

    RelativeLayout中的布局 自适应宽度布局 该图片中为android布局 总布局为 RelativeLayout AtLeft 为居左 android layout height wrap content android layo
  • mf253s移动版变全网通_中国电信发布5G全网通终端需求白皮书v2.0

    2019 11 07 10 56 2019年10月31日 中国5G正式商用 标志着5G发展已进入快车道 整个社会各行各业对5G热情高涨 业界纷纷增加5G投入 5G终端的发展进程必将加快 市场空间巨大 潜力无限 为更好地引导产业链 推动5G加
  • nuxt.js服务端渲染使用flexible.js和postcss-px2rem实现移动端自适应—淘宝弹性布局方案(750px设计稿)

    在用vue做服务端渲染的时候需要对移动端做适配所以要用到postcss 2rem插件 第一步 首先下载flexible js 可加载阿里的cdn文件 http g tbcdn cn mtb lib flexible 0 3 4 flexib
  • Error: Package: mysql-community-server-5.6.41-2.el7.x86_64 (mysql56-community) Requires:

    http www cnblogs com xiaoluo501395377 archive 2013 04 07 3003278 html MySQL登陆失败 ERROR 2002 HY000 Can t connect to local
  • JDK与Tomcat的安装及配置教程

    code ran 超级详细的JDK与Tomcat的安装及配置教程 1 JDK的安装与环境配置 首先我们需要去官网上下载JDK对应的版本 以我现在要下载的1 8为例 1 官网 JDK官网地址 具体操作如下 然后下载之后去下载路径下去安装即可
  • k8s v1.2 web界面——kubernetes-dashboard详解

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 1 Kube dashboard介绍 dashboard功能 Kube dashboard是kube 1 2版本中新增的 具备与kubelet commandline类似的
  • LeetCode——049

    49 Group Anagrams My Submissions QuestionEditorial Solution Total Accepted 73397 Total Submissions 267525 Difficulty Med
  • 一些VR延迟优化方法

    VR中的 延迟 特指 Motion To Photon Latency 指的是从用户运动开始到相应画面显示到屏幕上所花的时间 这中间经过了大概这么几个步骤 传感器采集运动输入数据 采集到的数据进行过滤并通过线缆传输到主机 游戏引擎根据获取的
  • 红黑树学习

    红黑树的是一种特殊的二叉搜索树 有如下性质 性质1 节点是红色或黑色 性质2 根是黑色 性质3 每个叶节点是黑色的 性质4 每个红色节点的两个子节点都是黑色 从每个叶子到根的所有路径上不能有两个连续的红色节点 性质5 从任一节点到其每个叶子
  • 项目同时使用两个mysql驱动_SpringBoot配置双数据源(一个项目同时连接操作两台数据库)...

    本文章使用的是持久化框架为JPA 所以数据源也是基于JPA 采用的是SpringBoot2 SpringDataJPA MySQL 双数据源 一 双数据源的适用场景 1 主从库分离 数据库读写分离 2 数据迁移 3 系统版本升级 数据库升级
  • session失效时间设置

    session失效时间设置 一 java代码 request getSession setMaxInactiveInterval 1800 秒为单位 二 web xml
  • 璀璨光滑【牛客】【题意解析+BFS+贪心】

    题目链接 中文题意 表面平静 实则暗藏玄机 而打开本题的突破口 也确确实实就在于题目的描述 也就是说 这张图的边的数目是确定的 并且这是一张连通图 而且图上的个点每个点连接出去的边的数目都是条 因为每个数都刚好只与个数在二进制位上差1 那么