洛谷题面

CF1776J


分析

将原图的点所拆开的点按二进制编号,那么同一个点之间连边当且仅当恰好一个二进制位不同,

不同点之间连边颜色相同则其二进制相同,否则完全相反。

可以钦定起点就是 \((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的更多相关文章

  1. HDU 5025Saving Tang Monk BFS + 二进制枚举状态

    3A的题目,第一次TLE,是因为一次BFS起点到终点状态太多爆掉了时间. 第二次WA,是因为没有枚举蛇的状态. 解体思路: 因为蛇的数目是小于5只的,那就首先枚举是否杀死每只蛇即可. 然后多次BFS, ...

  2. hdu 1429 bfs+二进制状态压缩

    开始时候只用了BFS,显然超时啊,必然在结构体里加一个数组什么的判重啊,开始用的一个BOOL数组,显然还是不行,复杂度高,每次都要遍历数组来判重:后百度之,学习了二进制状态压缩,其实就用一个二进制数来 ...

  3. BFS+二进制状态压缩 hdu-1429

    好久没写搜索题了,就当练手吧. vis[][][1025]第三个维度用来维护不同key持有状态的访问情况. 对于只有钥匙没有对应门的位置,置为'.',避免不必要的状态分支. // // main.cp ...

  4. HDU 1885 Key Task (带门和钥匙的迷宫搜索 bfs+二进制压缩)

    传送门: http://acm.hdu.edu.cn/showproblem.php?pid=1885 Key Task Time Limit: 3000/1000 MS (Java/Others)  ...

  5. replication across two data centers

    http://andyhan.net/index.php/sys-adm/item/291-hbase-replication http://shitouer.cn/2013/04/hbase-mul ...

  6. 论文阅读:FlexGate: High-performance Heterogeneous Gateway in Data Centers

    摘要: 大型数据中心通过边界上的网关对每个传入的数据包执行一系列的网络功能,例如,ACL被部署来阻止不合格的流量,而速率限制被用于防止供应商过度使用带宽,但是由于流量的规模巨大,给网关的设计和部署带来 ...

  7. [Python] 05 - Load data from Files

    文件读写 一.文件打开 传统方法 >>> f = open('data.txt', 'w') # Make a new file in output mode ('w' is wri ...

  8. 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 ...

  9. [Windows Azure] Data Management and Business Analytics

    http://www.windowsazure.com/en-us/develop/net/fundamentals/cloud-storage/ Managing and analyzing dat ...

  10. 每日英语: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 ...

随机推荐

  1. Direct2D CreateBitmap的使用

    当需要设置位图的混合模式时,应该使用ID2D1DeviceContext而不是ID2D1RenderTarget. 代码如下: #define WIN32_LEAN_AND_MEAN #include ...

  2. Maven应用常见问题

    在Spring Boot项目中打包指定类为启动类 <build> <plugins> <plugin> <groupId>org.springframe ...

  3. maketrans和translate按规则一次性替换多个字符,用来替代replace

    str_ = 'i love you' compiler_ = str_.maketrans('i l y', 'I L Y') print(str_.translate(compiler_))

  4. Flex 弹性盒子布局

    可以少去理解一些不必要的概念,而多去思考为什么会有这样的东西,它解决了什么问题,或者它的运行机制是什么? 1. 弹性盒子布局概念 Flex 是 Flexible Box 的缩写,意为"弹性布 ...

  5. Gitlab的部署

    # Gitlab sudo docker run --detach \   --hostname gitlab.example.com \   --publish 443:443 --publish ...

  6. 【Azure 事件中心】Kafka 生产者发送消息失败,根据失败消息询问机器人得到的分析步骤

    问题描述 Azure Event Hubs -- Kafka 生产者发送消息存在延迟接收和丢失问题, 在客户端的日志中发现如下异常: 2023-06-05 02:00:20.467 [kafka-pr ...

  7. 【Azure 云服务】Azure Cloud Service如何来设置固定IP地址(ReservedIP)

    问题描述 在云中环境,部署的应用到云服务(Cloud Service)都是动态的IP地址,所以在添加DNS记录的时候,都是使用CNAME,但如果需要在DNS中添加A记录,则需要一个固定IP. 解决方案 ...

  8. kotlin协程小记

    转载请标明出处:https://www.cnblogs.com/tangZH/p/16849169.html -[kotlin协程小记]-[协程的async使用]- [kotlin协程异常处理之-tr ...

  9. cpu过高什么原因?怎么排查?

    运行大型程序或应用程序:当计算机运行大型程序或应用程序时,CPU需要处理更多的数据和指令,因此CPU占用率会相应地增加. 病毒或恶意软件:某些病毒或恶意软件会占用计算机的CPU资源来执行恶意任务,例如 ...

  10. 【主流技术】日常工作中关于 JSON 转换的经验大全(Java)

    目录 前言 一.JSON 回顾 1.1结构形式 二.其它类型 -> JSON相关 2.1 JavaBean 转 JsonObject 2.2 JavaBean 转 Json 字符串 2.3 Li ...