#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 ...
随机推荐
- win32-封装BeginPaint
Graphics* StartPaint(HWND win, HDC* hdc, PAINTSTRUCT* ps) { *hdc = BeginPaint(win, ps); return new G ...
- virtualapp 应用启动源码分析
应用启动源码分析 在HomeActvity中的OnCreate方法会调用initLaunchpad private void initLaunchpad() { mLauncherView.setHa ...
- FastAPI中全局异常处理
装饰器版本自定义异常 1.首先我们定义三个文件,分别为exception.py,main.py, user.py 2.自定义异常需要继承HTTPException,该异常可以从fastapi中直接导入 ...
- day01---操作系统安装环境准备
虚拟机安装操作系统步骤 1.新建虚拟主机 2.选择自定义 3.稍后安装操作系统 4.操作系统选择linux 5.选择存放位置 6.cpu和核数选择,默认即可 7.内存分配 8.网络选择 9.控制器类型 ...
- pyqt5中通过pycharm配置designer(win和mac都适用,修改下designer目录路径即可)
安装 pip install PyQt5 -i https://pypi.douban.com/simple pip install PyQt5-tools -i https://pypi.douba ...
- docker 发布.net core 项目(linux)
一.准备阶段:前提:一台linux系统,安装好了Docker并启动 1.上传.netcore项目压缩文件 2.解压 注:若没有解压软件,先下载rar解压软件再安装:需注意系统是64位还是32 (下 ...
- 问题:django.template.exceptions.TemplateSyntaxError: 'staticfiles' is not a registered tag library. Must be one of: admin_list admin_modify admin_urls cache i18n l10n log rest_framework static tz
django使用swagger自动生成API文档时,报错 解决方法 在settings.py里面配置一下以下代码 'libraries': { 'staticfiles': 'django.templ ...
- 【LeetCode二叉树#02】二叉树层序遍历(广度优先搜索),十合一专题
二叉树层序遍历(广度优先搜索) 102 二叉树的层序遍历 力扣题目链接(opens new window) 给你一个二叉树,请你返回其按 层序遍历 得到的节点值. (即逐层地,从左到右访问所有节点). ...
- 【LeetCode栈与队列#01】队列的基本操作:用栈模拟队列和用队列模拟栈
用栈实现队列 力扣题目链接(opens new window) 使用栈实现队列的下列操作: push(x) -- 将一个元素放入队列的尾部. pop() -- 从队列首部移除元素. peek() -- ...
- hibernate-delete(Entity)的顺序问题
hibernate为我们提供了删除直接根据实体参数删除数据的方法: HibernateTemplate().delete(entity); public void delete(final Objec ...