CF1361C Solution
时间:2021-08-12
本文章向大家介绍CF1361C Solution,主要包括CF1361C Solution使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
题解
可以发现 \(k\) 的取值范围只有 \(20\) ,可以枚举答案。若当前答案 \(i\) 成立,则合并在一起的珍珠后 \(i\) 位一定相等。因此对于每对珍珠 \((a,b)\) ,将 \(a\) 后 \(i\) 位的值与 \(b\) 后 \(i\) 位的值连边。易得若图中存在欧拉回路则答案成立,该欧拉回路即为项链方案。
AC代码
#include<bits/stdc++.h>
using namespace std;
const int N=5e5+10,M=105e4;
struct node {int v,nxt,x,y;} e[2*N];
int a[N],b[N],in[M],st[2*N],top;
int fst[M],cnt; bool vis[2*N],qwq[M];
void add(int x,int y,int xx,int yy)
{
in[y]++; e[++cnt].v=y;
e[cnt].x=xx,e[cnt].y=yy;
e[cnt].nxt=fst[x],fst[x]=cnt;
}
void dfs(int x)
{
qwq[x]=1;
for(int i=fst[x];i;i=fst[x])
{
fst[x]=e[i].nxt;
int y=e[i].v;
if(vis[i]) continue;
vis[i]=vis[i^1]=1;
dfs(y); st[++top]=i;
}
}
int main()
{
int n;
scanf("%d",&n);
for(int i=1;i<=n;i++) scanf("%d%d",&a[i],&b[i]);
for(int i=20;i>=1;i--)
{
memset(fst,0,sizeof(fst)); cnt=1;
memset(in,0,sizeof(in));
memset(vis,0,sizeof(vis)); top=0;
memset(qwq,0,sizeof(qwq));
int tmp=(1<<i)-1,x,y,flag=0;
for(int j=1;j<=n;j++)
{
x=a[j]&tmp,y=b[j]&tmp;
add(x,y,j*2-1,j*2),add(y,x,j*2,j*2-1);
}
for(int j=1;j<=n;j++)
{
x=a[j]&tmp,y=b[j]&tmp;
if(in[x]&1 || in[y]&1) {flag=1; break;}
}
if(flag) continue;
dfs(a[1]&tmp);
for(int j=1;j<=n;j++)
{
x=a[j]&tmp,y=b[j]&tmp;
if(!qwq[x] || !qwq[y]) {flag=1; break;}
}
if(flag) continue;
printf("%d\n",i);
while(top--) printf("%d %d ",e[st[top+1]].x,e[st[top+1]].y);
return 0;
}
printf("0\n");
for(int i=1;i<=n;i++) printf("%d %d ",i*2-1,i*2);
return 0;
}
原文地址:https://www.cnblogs.com/violetholmes/p/15131816.html
- Golang语言 监控文件变化小程序.
- Golang语言实现 tail 查看文本文件末行功能,类似于linux tail -n 100 功能
- Golang语言 实现线程池
- Golang实现类似Scan或者Scanf功能
- 简单易学的机器学习算法——Mean Shift聚类算法
- apache tuscany(一)
- Golong 类型方法理解
- apache synapse使用(1)
- apache synapse使用(2)
- 一文搞懂HMM(隐马尔可夫模型)
- 图解机器学习总结——2、回归
- 跟我一起ggplot2(1)
- 图解机器学习总结——1、基本概念
- 跟我一起hadoop(1)-hadoop2.6安装与使用
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 探索在网页中使用“标注”
- 笔试题:了解穷举算法吗?如何用代码实现
- 硬核看房利器——Web 全景的实现
- 超级播放器tcplayer如何设置logo
- 【Flutter 实战】1.20版本更新及新增组件
- 手把手教你使用Python实现常用的假设检验 !
- Oracle 每日一题系列合集
- Arrow更好用的python时间序列处理库,你用过吗?
- 死信队列监听补充
- 手把手教你用Python查询你的物流信息
- Selenium自动登录淘宝,我无意间发现了登录漏洞!
- 【DB宝20】在Docker中分分钟即可拥有OGG Director环境
- mq监听死信队列后如何处理
- 【小白学PyTorch】7 最新版本torchvision.transforms常用API翻译与讲解
- 小白学PyTorch | 8 实战之MNIST小试牛刀