UVA12267 Telephone Network
nb tea。
注意到如果两个需要相互接通的请求 \(a,b\) 在某一层分别接了上下两个开关,那么接下来它们永远也无法接通了,因为上下两个开关是相互独立的,不会出现上面的开关和下面的开关有连边的情况。
不妨先考虑每个请求如何接第 \(n-1\) 层开关。限制如下:
- 对于请求 \(i\in [0,2^{n-1})\),显然它们和请求 \(i+2^{n-1}\) 不能同时往上走或往下走,不然就会出现一个节点被两个请求占用的情况。
- \(a_j\) 和 \(b_j\) 走的方向要相同,即 \(b_j\) 走的方向不能与 \(a_j\) 相反。
- 请求不能同时往上或往下走。
有这么多限制,这就启发我们用图论的方法解决这道题目:一共有 \(2^{n+2}\) 个节点。第 \(i\in [0,2^n)\) 个节点表示左边第 \(i\) 个请求往上走;第 \(i\in[2^n,2^{n+1})\) 个节点表示左边第 \(i-2^n\) 个请求往下走;第 \(i\in [2^{n+1},3\times 2^n)\) 个节点表示右边第 \(i\) 个请求往上走;第 \(i\in[3\times 2^n,2^{n+2})\) 个节点同理。根据上述三种限制对于两个不能同时发生的事件,我们将其连一条边,最后二分图染色即可。因为保证有解所以不需要考虑无解的情况。
接第 \(n-1\) 层开关的方案有了之后,再类似地去考虑接第 \(n-2,n-3,\cdots,1\) 层开关即可。
时间复杂度 \(\mathcal{O}(Tn2^n)\)。
#include <bits/stdc++.h>
using namespace std;
#define mem(x,v) memset(x,v,sizeof(x))
const int N=16;
int t,n,m,x[1<<N],y[1<<N];
int cnt,vis[4<<N],col[4<<N],hd[4<<N],nxt[12<<N],to[12<<N];
void add(int u,int v){
nxt[cnt]=hd[u],hd[u]=cnt,to[cnt++]=v;
nxt[cnt]=hd[v],hd[v]=cnt,to[cnt++]=u;
}
void dfs(int id,int c){
vis[id]=1,col[id]=c;
for(int i=hd[id];i;i=nxt[i])if(!vis[to[i]])dfs(to[i],c^1);
}
void solve(){
cin>>n>>m;
for(int i=0;i<m;i++)scanf("%d%d",&x[i],&y[i]);
for(int i=n-1;~i;i--){
mem(vis,0),mem(col,0),mem(hd,0),cnt=0;
for(int j=0;j<m;j++)add(x[j],y[j]+(3<<n)),add(x[j]+(1<<n),y[j]+(2<<n));
for(int j=0;j<1<<n;j++)add(j,j+(1<<n)),add(j+(2<<n),j+(3<<n));
for(int j=0;j<1<<n;j++)if((j>>i)&1)
add(j,j-(1<<i)),add(j+(1<<n),j-(1<<i)+(1<<n)),
add(j+(2<<n),j+(2<<n)-(1<<i)),
add(j+(3<<n),j+(3<<n)-(1<<i));
for(int j=0;j<4<<n;j++)if(!vis[j])dfs(j,0);
for(int j=0;j<m;j++){
if(col[x[j]])x[j]-=(x[j]>>i&1)<<i;
else x[j]+=(!(x[j]>>i&1))<<i;
if(col[y[j]+(2<<n)])y[j]-=(y[j]>>i&1)<<i;
else y[j]+=(!(y[j]>>i&1))<<i;
}
}
for(int i=0;i<m;i++)cout<<x[i]<<(i==m-1?'\n':' ');
}
int main(){
cin>>t;
while(t--)solve();
return 0;
}
UVA12267 Telephone Network的更多相关文章
- Overlay network 覆盖网络
From Wikipedia, the free encyclopedia An overlay network is a computer network that is built on top ...
- UVA 1456 六 Cellular Network
Cellular Network Time Limit:3000MS Memory Limit:0KB 64bit IO Format:%lld & %llu Submit S ...
- Lists of network protocols
https://en.wikipedia.org/wiki/Lists_of_network_protocols Protocol stack: List of network protocol st ...
- word20161217
p-node / p 节点 package / 程序包 packet / 数据包 packet assembler/disassembler, PAD / 分组拆装器 packet header / ...
- Android IOS WebRTC 音视频开发总结(十)-- webrtc入门002
继续上一篇中未翻译完成的部分,主要包括下面三个部分: 1,扩展:WebRTC多方通话. 2,MCU Multipoint Control Unit. 2, 扩展:VOIP,电话,消息通讯. 注意:翻译 ...
- url中的scheme
iPhone上URL Schemes的作用为应用程序提供了一个其他应用程序或者safari可以启动他的方法. --http://blog.sina.com.cn/s/blog_5673c12f0100 ...
- openerp - asterisk connector(转载)
原文:http://www.akretion.com/open-source-contributions/openerp-asterisk-voip-connector OpenERP - Aster ...
- CCNA第一讲笔记
园区网:一组连续的局域网(校园网.企业内部网) 园区网拓扑: 一层楼的PC连接到一台交换机(同一层的PC可以互联):一栋楼的每层的交换机连接到同一台交换机(整栋楼的PC可以互联):每栋楼的交换机连接到 ...
- PSTN
PSTN ( Public Switched Telephone Network )定义:公共交换电话网络,一种常用旧式电话系统.即我们日常生活中常用的电话网.工作原理 公共交换电话网络是一种全球语音 ...
随机推荐
- 【二食堂】Beta - 事后分析
事后分析 设想和目标 我们的软件要解决什么问题?是否定义得很清楚?是否对典型用户和典型场景有清晰的描述? Beta阶段我们首先要对文本标注方式进行优化,其次时添加好友系统,实现邀请好友共同标注的功能. ...
- [对对子队]会议记录5.25(Scrum Meeting11)
今天已完成的工作 吴桐雨 工作内容:设计第10.11关 相关issue:设计额外关卡 相关签入:level10 level11 吴昭邦 工作内容:写测试代码 相关issue:测试初 ...
- DDL_Killer Alpha版本 Bug集中反馈处
本博客用于DDL_Killer Alpha版本的Bug集中反馈. 您可以在本博客的下方评论区处留言,反馈您在使用DDl_Killer的过程中遇到的问题,以帮助我们更好的改进本产品. 我们会尽快修复找到 ...
- BUAA软件工程个人作业-软件案例分析
BUAA个人博客作业-软件案例分析 项目 内容 这个作业属于哪个课程 2020春季计算机学院软件工程(罗杰 任健) 这个作业的要求在哪里 软件案例分析 我在这个课程的目标是 学习开发软件的能力 这个作 ...
- netty入门实现简单的echo程序
最近看以往在程序中编写的代码,发现有一个功能是使用socket通讯来实现的,而那个时候使用的是基于bio的阻塞io来实现的,最近在看netty,发现可以使用netty来使用nio的方式来实现,此博客记 ...
- 认识spring security
在一个系统中认证和授权是常有的事情,现在比较流行的框架有spring security.shiro等等.他们都能很好的帮助我们完成认证和授权的功能.那么假如说让我们自己完成一个登录那么应该大致的流程是 ...
- 并发编程从零开始(十二)-Lock与Condition
并发编程从零开始(十二)-Lock与Condition 8 Lock与Condition 8.1 互斥锁 8.1.1 锁的可重入性 "可重入锁"是指当一个线程调用 object.l ...
- PicGo插件
前言:主要介绍PicGo插件,这里的图床上传软件是PicGo-Core,使用命令行操作 PicGo_Path:自己的PicGo安装路径,如果通过Typora一般安装位置位于 C:\Users\自己的主 ...
- RocketMQ 5.0 POP 消费模式探秘
作者:凯易&耘田 审核校对:白玙 编辑&排版:雯燕 前言:随着 RocketMQ 5.0 preview 的发布,5.0 的重大特性逐步与大家见面.POP Consumer 作为 5. ...
- 逐浪CMS+百度小程序开源包发布-对接海量资源助力推广
接入百度小程序海量流量就在使用Zoomla!逐浪CMS开发栈 这里有最强的CMS内核依托于国家高新企业Zoomla!逐浪之上 这里有最海量的用户流量依托于百度小程序 这里有最开放的技术栈 这里有最卓越 ...