“金山-讯飞”杯2024年武汉理工大学程序设计竞赛 A. Mobiusp败走***(思维题-点双连通分量、连通性)

题目

思路来源

官方题解

题解

手玩发现,能换的话,当且仅当.和1在一个环里,而这就是点双连通分量

所以最优策略是先把.换到(x,y)的位置,然后判断.和1在不在一个环里

也就是:

1. 判断删掉1时,.和(x,y)联通

2. 判断(x,y)和1在同一个连通分量里

这个和三者在同一个连通分量不等价,可以参考下图:

.和1并不在一个点双里,但是可以先把.换到(1,2)的位置里,使之在同一个点双里

3 3

1 2

#**
**1
.##

代码

#include<bits/stdc++.h>
using namespace std;
#define rep(i,a,b) for(int i=(a);i<=(b);++i)
#define per(i,a,b) for(int i=(a);i>=(b);--i)
typedef long long ll;
typedef double db;
typedef pair<int,int> P;
#define fi first
#define se second
#define pb push_back    
#define dbg(x) cerr<<(#x)<<":"<<x<<" ";
#define dbg2(x) cerr<<(#x)<<":"<<x<<endl;
#define SZ(a) (int)(a.size())
#define sci(a) scanf("%d",&(a))
#define pt(a) printf("%d",a);
#define pte(a) printf("%d\n",a)
#define ptlle(a) printf("%lld\n",a)
#define debug(...) fprintf(stderr, __VA_ARGS__)
using namespace std;
const int N=1500*1500+5,M=1500*1500*4+5,K=1502;
int n,m,u,v,ex,ey,blk,one,ed;
int low[N],dfn[N],tot,tp,cnt;
vector<P>stk;
bool vis[N];
char s[K][K];
vector<int>e[N];
int f(int x,int y){return x*m+y;
}
void add(int x,int y){e[x].pb(y);
}
bool dfs(int u,int fa){low[u]=dfn[u]=++tot;int ch=0;for(auto &v:e[u]){if(!dfn[v]){stk.pb(P(u,v));//记录当前BCC的边if(dfs(v,u))return 1;ch++;//从u这里向下dfs的子树的数量low[u]=min(low[u],low[v]);if(low[v]>=dfn[u]){//割点ubool ok1=0,ok2=0;for(;;){P x=stk.back();stk.pop_back();int y=x.fi,z=x.se;ok1|=(y==one);ok2|=(y==ed);ok1|=(z==one);ok2|=(z==ed);//printf("one:%d ed:%d\n",y,z);if(ok1 && ok2)return 1;if(y==u && z==v)break;}}}else if(v!=fa && dfn[v]<dfn[u]){stk.pb(P(u,v));low[u]=min(low[u],dfn[v]);}}return 0;
}
bool dfs2(int u){vis[u]=1;if(u==blk)return 1;for(auto &v:e[u]){if(vis[v] || v==one)continue;if(dfs2(v))return 1;}return 0;
}
bool sol(){sci(n),sci(m);sci(ex);sci(ey);ex--;ey--;rep(i,0,n-1){scanf("%s",s[i]);}rep(i,0,n-1){rep(j,0,m-1){if(s[i][j]=='#')continue;int x=f(i,j);if(s[i][j]=='1')one=x;if(s[i][j]=='.')blk=x;if(i-1>=0 && s[i-1][j]!='#'){int y=f(i-1,j);//printf("x:%d y:%d\n",x,y);add(x,y);add(y,x);}if(j-1>=0 && s[i][j-1]!='#'){int y=f(i,j-1);//printf("x2:%d y2:%d\n",x,y);add(x,y);add(y,x);}}}ed=f(ex,ey);if(one==ed)return 1;if(!dfs2(ed))return 0;rep(i,0,n-1){rep(j,0,m-1){if(s[i][j]=='#')continue;int x=f(i,j);if(!dfn[x] && dfs(x,-1))return 1;}}return 0;
}
int main(){puts(sol()?"Yes":"No");return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/44628.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue 搭建 pinia

文章目录 环境设置存储读取数据【 storeToRefs】借助storeToRefs将store中的数据转为ref对象&#xff0c;方便在模板中使用【getters】当state中的数据&#xff0c;需要经过处理后再使用时&#xff0c;可以使用getters配置【$subscribe】通过 store 的 $subscribe() 方法侦听 s…

科研绘图系列:R语言圆形柱状图(circular barplot)

介绍 圆形柱状图(circular barplot),又称为雷达图或蜘蛛网图(Spider Chart),是一种用来展示多变量数据的图表。这种图表使用一个圆形的网格,将数据变量分布在一个或多个从中心点向外延伸的轴上,每个轴代表一个变量,数据点在轴上的位置表示该变量的值。然后,将这些点…

SAP与易链SRM系统集成案例

一、项目环境 重庆润通控股&#xff08;集团&#xff09;有限公司成立于2007年&#xff0c;是一家集合汽柴油动力及终端、摩托车、储能电源、汽车零部件、金融服务等产业的多元化集团公司。现拥有员工超4000人&#xff0c;业务遍布全球80多个国家及地区&#xff0c;2021年营…

Mysql LIKE什么时候走索引,什么时候不走索引

在 MySQL 中&#xff0c;LIKE 查询是否走索引&#xff0c;主要取决于通配符的位置和使用的存储引擎。 使用索引的情况 前缀匹配&#xff1a; 当 LIKE 查询中的通配符出现在字符串的末尾时&#xff0c;查询可以利用索引。例如&#xff0c;LIKE abc% 。这种情况下&#xff0c;索…

文件加密软件谁好用丨2024文件加密软件TOP6推荐

在数字化时代&#xff0c;数据安全已成为企业和个人不可忽视的重要议题。随着数据泄露事件频发&#xff0c;文件加密软件成为了保护敏感信息的首选工具。 本文将为您推荐2024年度最值得信赖的六大文件加密软件&#xff0c;帮助您选择最适合自己需求的加密工具。 1. 域智盾 软…

东方博宜1626 - 暑假的旅游计划

问题描述 期末考试结束了&#xff0c;小华语文、数学、英语三门功课分别考了 x、y、z 分&#xff0c;小华的家长说&#xff0c;如果小华三门功课的平均分在90 分或者 90 分以上&#xff0c;那么就去北京旅游&#xff0c;如果在 90 分以下&#xff0c;那么就去南京玩。 请从键盘…

[linux] git push时需要输入user 和keyword

git clone的要是ssh链接&#xff01;&#xff01;&#xff01;&#xff01; 1、用户名和邮箱 git config --global user.name "name" git config --global user.email "email" 2、生成ssh key (ED25519) ssh-keygen -t ed25519 -C "<自定义内容&g…

手机容器化 安装docker

旧手机-基于Termux容器化 1、安装app 在手机上安装Termux或ZeroTermux&#xff08;Termux扩展&#xff09; 1.1 切换源 注&#xff1a;可以将termux进行换源&#xff0c;最好采用国内源&#xff0c;例如&#xff1a;清华源等 更新包列表和升级包&#xff08;可选&#xff0…

健康云足迹:在iCloud中珍藏您的个人健康检查记录

健康云足迹&#xff1a;在iCloud中珍藏您的个人健康检查记录 随着健康意识的提高&#xff0c;个人健康数据管理变得越来越重要。iCloud作为苹果公司提供的云服务&#xff0c;不仅能够同步您的联系人、日历和照片&#xff0c;还能成为您个人健康检查记录的安全港湾。本文将详细…

数智驱动丨zAIoT 连续落地军工、科研院所和机械制造场景,推动数智化转型升级...

引言 在这个万物互联的时代&#xff0c;科技的进步正以不可阻挡之势&#xff0c;深刻地影响并重塑我们的生产和生活方式。数智化转型升级在各个领域展现出强大的动力&#xff0c;已经成为推动社会向前发展的关键力量。 最近&#xff0c;云和恩墨自主研发的数据智能分析处理平台…

FUSE(用户空间文件系统)命令参数

GPT-4 (OpenAI) FUSE (Filesystem in Userspace)是一个允许创建用户空间文件系统的接口。它提供了一个API&#xff0c;让开发者在未修改内核代码的情况下&#xff0c;通过自己的程序实现文件系统。FUSE 文件系统通常通过 mount 命令来挂载&#xff0c;而且这个命令可以接受各…

时序分解 | Matlab基于ESMD极点对称模态分解

时序分解 | Matlab基于ESMD极点对称模态分解 目录 时序分解 | Matlab基于ESMD极点对称模态分解效果一览基本介绍程序设计参考资料 效果一览 基本介绍 ESMD&#xff08;Extreme-point Symmetric Mode Decomposition&#xff09;是一种信号分解方法&#xff0c;用于提取信号中的模…

【C语言之高级编程】如何将指定变量或函数编译至固定的内存区域中?

如何将指定变量或函数编译至固定的内存区域&#xff1f; 1. 内存类型1.1 bss段&#xff08;Block Started by Symbol&#xff09;1.2 data段&#xff08;data segment&#xff09;1.3 text段&#xff08;code segment/text segment&#xff09;1.4 dec1.5 堆&#xff08;heap&a…

华为模拟器ensp中USG6000V防火墙web界面使用

防火墙需要配置 新建拓扑选择USG6000V型号 在防火墙中导包 忘记截图了 启动设备 输入用户名密码 默认用户名&#xff1a;admin 默认密码&#xff1a;Admin123 修改密码 然后他会提示你是否要修改密码&#xff0c;想改就改不想改就不改 进入命令行界面 进入系统视图开启web…

释放SQL Server潜能:数据库查询性能调优的黄金法则

释放SQL Server潜能&#xff1a;数据库查询性能调优的黄金法则 在企业级应用中&#xff0c;数据库查询性能是影响用户体验和系统效率的关键因素。SQL Server作为微软推出的关系型数据库管理系统&#xff0c;提供了丰富的性能调优工具和策略。本文将深入探讨SQL Server数据库查…

7个外贸网站模板

Nebula独立站wordpress主题 Nebula奈卜尤拉wordpress主题模板&#xff0c;适合搭建外贸独立站使用的wordpress主题。 https://www.jianzhanpress.com/?p7084 Starling师大林WordPress独立站模板 蓝色橙色风格的WordPress独立站模板&#xff0c;适合做对外贸易的外贸公司搭建…

【C++】类和对象--类,实例化,this指针

文章目录 前言一、类1.1 类的定义1.2 类的书写和使用1.3 访问限定符1.4 类域 二、实例化2.1 实例化概念2.2 对象大小 三.this指针总结 前言 前面的几篇文章我们介绍了命名空间&#xff0c;inline&#xff0c;nullptr等C 中常见的的基础概念。今天的文章我们来介绍一些C中类与对…

数据结构 —— BellmanFord算法

数据结构 —— BellmanFord算法 BellmanFord算法检测负权值环BellmanFord和Dijkstra思想上的区别Dijkstra算法的思想Bellman-Ford算法的思想思想上的对比 我们今天来看一个算法BellmanFord算法&#xff0c;我们之前的Dijkstra算法只能用来解决正权图的单源最短路径问题。 Bell…

C语言入门基础题:奇偶 ASCII 值判断(C语言版)和ASCII码表,什么是ASCII码,它的特点和应用?

1.题目描述&#xff1a; 任意输入一个字符&#xff0c;判断其 ASCII 是否是奇数&#xff0c;若是&#xff0c;输出 YES &#xff0c;否则&#xff0c;输出 NO例如&#xff0c;字符 A 的 ASCI 值是 65 &#xff0c;则输出 YES &#xff0c;若输入字符 B(ASCII 值是 66)&#xff…

数据库的学习(5)

题目&#xff1a; 1、新增员工表emp和部门表dept create table dept (deptl int,dept name varchar(11)) charsetutf8; create table emp (sid int,name varchar(11),age int,worktime start date,incoming int,dept2 int) charsetutf8; insert into dept values (101,财务), (…