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的更多相关文章

  1. Overlay network 覆盖网络

    From Wikipedia, the free encyclopedia An overlay network is a computer network that is built on top ...

  2. UVA 1456 六 Cellular Network

    Cellular Network Time Limit:3000MS     Memory Limit:0KB     64bit IO Format:%lld & %llu Submit S ...

  3. Lists of network protocols

    https://en.wikipedia.org/wiki/Lists_of_network_protocols Protocol stack: List of network protocol st ...

  4. word20161217

    p-node / p 节点 package / 程序包 packet / 数据包 packet assembler/disassembler, PAD / 分组拆装器 packet header / ...

  5. Android IOS WebRTC 音视频开发总结(十)-- webrtc入门002

    继续上一篇中未翻译完成的部分,主要包括下面三个部分: 1,扩展:WebRTC多方通话. 2,MCU Multipoint Control Unit. 2, 扩展:VOIP,电话,消息通讯. 注意:翻译 ...

  6. url中的scheme

    iPhone上URL Schemes的作用为应用程序提供了一个其他应用程序或者safari可以启动他的方法. --http://blog.sina.com.cn/s/blog_5673c12f0100 ...

  7. openerp - asterisk connector(转载)

    原文:http://www.akretion.com/open-source-contributions/openerp-asterisk-voip-connector OpenERP - Aster ...

  8. CCNA第一讲笔记

    园区网:一组连续的局域网(校园网.企业内部网) 园区网拓扑: 一层楼的PC连接到一台交换机(同一层的PC可以互联):一栋楼的每层的交换机连接到同一台交换机(整栋楼的PC可以互联):每栋楼的交换机连接到 ...

  9. PSTN

    PSTN ( Public Switched Telephone Network )定义:公共交换电话网络,一种常用旧式电话系统.即我们日常生活中常用的电话网.工作原理 公共交换电话网络是一种全球语音 ...

随机推荐

  1. 【UE4 C++】 Config Settings配置文件(.ini)

    简介 常见存储路径 \Engine\Config\ \Engine\Saved\Config\ (运行后生成) [ProjectName]\Config\ [ProjectName]\Saved\Co ...

  2. [源码解析] Pytorch 如何实现后向传播 (1)---- 调用引擎

    [源码解析] Pytorch 如何实现后向传播 (1)---- 调用引擎 目录 [源码解析] Pytorch 如何实现后向传播 (1)---- 调用引擎 0x00 摘要 0x01 前文回顾 1.1 训 ...

  3. [no_code][Beta]事后分析

    设想和目标 我们的软件要解决什么问题?是否定义得很清楚?是否对典型用户和典型场景有清晰的描述? 我们要解决的目前的手写表单的电子化问题,办公电子化问题的一个key问题.定义十分清楚: 输入: 手写表单 ...

  4. Java-基础-LinkedList

    1. 简介 LinkedList 同时实现了List和Deque接口,也就是说它既可以看作是一个顺序容器,又可以看作是双向队列. 既然是双向列表,那么它的每个数据节点都一定有两个指针,分别指向它的前驱 ...

  5. 洛谷 P3209 [HNOI2010] 平面图判定

    链接: P3209 题意: 给出 \(T\) 张无向图 \((T\leq100)\),并给出它对应的哈密顿回路,判断每张图是否是平面图. 分析: 平面图判定问题貌似是有线性做法的,这里给出链接,不是本 ...

  6. C# 如何将日期格式化ISO8601模式

    类似于这样的时间戳格式:预计来访时间,时间参数需满足ISO8601格式:yyyy-MM-ddTHH:mm:ss+当前时区,例如北京时间:2018-07-26T15:00:00 + 08:00 stri ...

  7. hdu 3863 No Gambling (不会证明,但是是对的,,)

    题意: N=4时 规则: 双方每次可以连接自己颜色的两个点(相邻,长度为1),线和线不能交叉重叠. 蓝方要连接左右,红方要连接上下. 蓝方先.问谁先连接? 思路: 经过观察....蓝方胜....... ...

  8. 基于 OSPF 路由的邻居邻接关系发现实践

    1.实验目的 理解 OSPF 邻居关系和 OSPF 邻接关系的含义及差别 观察 OSPF 邻居邻接关系的建立过程 观察 OSPF 链路状态数据库的同步过程 2.实验原理 OSPF 网络中,路由器在发送 ...

  9. GO 字符串反转

    字符串反转 即 abc 反转后成 cba 思路:两边都设置一个游标,然后互换位置,游标同步向中间移动,再互换. for i, j := 0, len(s)-1; i < j; i, j = i+ ...

  10. Code Runner for VS Code,下载量突破 3000 万!

    还记得五年前的夏天,我在巨硬写着世界上最好的语言,有时也需要带着游标卡尺写着另一门语言.然而,我对这两门语言都不熟悉,如果能在 VS Code 中方便快捷地运行各种语言,那岂不是很方便?于是,我就开发 ...