#BFS,二进制#CF1776J Italian Data Centers
分析
将原图的点所拆开的点按二进制编号,那么同一个点之间连边当且仅当恰好一个二进制位不同,
不同点之间连边颜色相同则其二进制相同,否则完全相反。
可以钦定起点就是 \((x,0)\) 那么需要记录经过了多少次因颜色不同而二进制取反的边,
因为同一个点到达其它二进制完全可以放到最后完成,那么设 \(dis[y][0/1]\) 表示从点 \(x\) 出发到达点 \(y\) 经过偶/奇条边的最短距离
那么最后枚举终点二进制位 \(1\) 的个数,可以取反奇数次将 \(1\) 删除,或者取反偶数次将 \(1\) 补齐,这样时间复杂度为 \(O(nm+n^2k)\)
代码
#include <cstdio>
#include <cctype>
#include <queue>
using namespace std;
const int N=111; struct node{int y,next;}e[N*N];
int dis[N][2],ans,n,m,k,a[N],as[N],et=1; queue<int>q;
int iut(){
int ans=0; char c=getchar();
while (!isdigit(c)) c=getchar();
while (isdigit(c)) ans=ans*10+c-48,c=getchar();
return ans;
}
void bfs(int st){
for (int i=1;i<=n;++i) dis[i][0]=dis[i][1]=0x3f3f3f3f;
dis[st][0]=0,q.push(st<<1);
while (!q.empty()){
int x=q.front()>>1,z=q.front()&1; q.pop();
for (int i=as[x];i;i=e[i].next){
int Z=z^(a[x]!=a[e[i].y]);
if (dis[e[i].y][Z]>dis[x][z]+1){
dis[e[i].y][Z]=dis[x][z]+1;
q.push(e[i].y<<1|Z);
}
}
}
}
int main(){
n=iut(),m=iut(),k=iut();
for (int i=1;i<=n;++i) a[i]=iut();
for (int i=1;i<=m;++i){
int x=iut(),y=iut();
e[++et]=(node){y,as[x]},as[x]=et;
e[++et]=(node){x,as[y]},as[y]=et;
}
for (int i=1;i<=n;++i){
bfs(i);
for (int x=1;x<=n;++x)
for (int j=0;j<=k;++j)
ans=max(ans,min(dis[x][0]+j,dis[x][1]+k-j));
}
return !printf("%d",ans);
}
#BFS,二进制#CF1776J Italian Data Centers的更多相关文章
- HDU 5025Saving Tang Monk BFS + 二进制枚举状态
3A的题目,第一次TLE,是因为一次BFS起点到终点状态太多爆掉了时间. 第二次WA,是因为没有枚举蛇的状态. 解体思路: 因为蛇的数目是小于5只的,那就首先枚举是否杀死每只蛇即可. 然后多次BFS, ...
- hdu 1429 bfs+二进制状态压缩
开始时候只用了BFS,显然超时啊,必然在结构体里加一个数组什么的判重啊,开始用的一个BOOL数组,显然还是不行,复杂度高,每次都要遍历数组来判重:后百度之,学习了二进制状态压缩,其实就用一个二进制数来 ...
- BFS+二进制状态压缩 hdu-1429
好久没写搜索题了,就当练手吧. vis[][][1025]第三个维度用来维护不同key持有状态的访问情况. 对于只有钥匙没有对应门的位置,置为'.',避免不必要的状态分支. // // main.cp ...
- HDU 1885 Key Task (带门和钥匙的迷宫搜索 bfs+二进制压缩)
传送门: http://acm.hdu.edu.cn/showproblem.php?pid=1885 Key Task Time Limit: 3000/1000 MS (Java/Others) ...
- replication across two data centers
http://andyhan.net/index.php/sys-adm/item/291-hbase-replication http://shitouer.cn/2013/04/hbase-mul ...
- 论文阅读:FlexGate: High-performance Heterogeneous Gateway in Data Centers
摘要: 大型数据中心通过边界上的网关对每个传入的数据包执行一系列的网络功能,例如,ACL被部署来阻止不合格的流量,而速率限制被用于防止供应商过度使用带宽,但是由于流量的规模巨大,给网关的设计和部署带来 ...
- [Python] 05 - Load data from Files
文件读写 一.文件打开 传统方法 >>> f = open('data.txt', 'w') # Make a new file in output mode ('w' is wri ...
- vSphere Data Protection – a new backup product included with vSphere 5.1
August 27, 2012 By Vladan SEGET This new backup product replaces VMware Data Recovery, which has bee ...
- [Windows Azure] Data Management and Business Analytics
http://www.windowsazure.com/en-us/develop/net/fundamentals/cloud-storage/ Managing and analyzing dat ...
- 每日英语:Google Scraps Plan to Build Hong Kong Data Center
Internet giant Google Inc. has scrapped a plan to build its own data center in Hong Kong and will in ...
随机推荐
- Java链接Mysql数据库整理,尽管很简单,但还是分享出来,希望对那些初级朋友有所帮助!!!
Java MySQL 连接 Java MySQL 连接 本章节我们为大家介绍 Java 如何使用 使用 JDBC 连接 MySQL 数据库. Java 连接 MySQL 需要驱动包,最新版下载地址为: ...
- 浅入Kubernetes(13):dashboard、api、访问配置
目录 Kubectl 命令大全 安装 Kubernetes-Dashboard RESTful API 鉴权 注解 Pod YAML 结构 配置 Kubectl 命令大全 在前面,我们学习到了一些 K ...
- 答对这 9 题你就超越了 83.3% 的图数据库 NebulaGraph 用户
熟悉 NebulaGraph 社区的小伙伴可能都知道一个技能认证叫做:NGCP,全称 NebulaGraph Certified Professional.用户在考试认证期间在 1 个小时内回答 10 ...
- Java 从键盘读入学生成绩 找出最高分 并输出学生等级成绩 * 成绩>=最高分-10 等级为’A‘ * 成绩>=最高分-20 等级为’B‘ * 成绩>=最高分-30 等级为'C' * 其余 等级为’D‘
1 /* 2 * 从键盘读入学生成绩 找出最高分 并输出学生等级成绩 3 * 成绩>=最高分-10 等级为'A' 4 * 成绩>=最高分-20 等级为'B' 5 * 成绩>=最高分- ...
- Java 临时笔记
1 //srand((unsignedint)time(NULL)); C 2 //获取随机数 10-99 3 4 //int value = (int)(Math.random() * 90+10) ...
- spring注解版 图文教程
注解方式,需要配置contextp空间,@component若无参数,那就是只能类方式加载 注解开发不用set 构造器 注入函数 注解注入属性 管理第三方bean 示例: 数据库的类写在一个文件,文件 ...
- vagrant 多个box的操作|共享目录失败
本来机器上已经有一个Ubuntu的box了,今天想在安装一个centos的box,结果还折腾了很长时间. 多个机器的命令 添加box的时候需要使用名称,一个的时候可以忽略名称 vagrant box ...
- sign 单词学习 - 本质:去分开
sign 英[saɪn],美[saɪn] n. 符号; 指示牌; 手势; 征兆; 正负号; 星座 v. 签名; 签约; 打手语 词源说明(童理民) sign : 来自拉丁语signum,符号,标志,图 ...
- 让 js 失效 Chrome F12 右上角 settings - Preferences - Debugger - Disable JavaScript
说的可能比较长,实际上,F12 右上角 - 右小角 还是挺好找的.
- nginx四层和七层负载的配置
四层负载和七层负载是两种不同类型的负载均衡策略,它们分别在网络的不同层次上工作.在Nginx中,这两种负载均衡策略可以通过配置nginx.conf文件来实现. 四层负载(L4 Load Balanci ...