【洛谷P1457】【USACO2.1.3】城堡【DFS】

复现HumanMAC(HumanMAC: Masked Motion Completion for Human Motion Prediction) Human3.6M和HumanEva-I都放到data目录下(记得将data_multi_modal-20250320T022408Z-001.zip和humaneva_multi_modal-20250320T022412Z-001.zip解压缩并且分别重命名为data_multi_modal和humaneva_multi_modal)。生成的gif存放在inference目录下zero_shot_<INDEX>下的out目录下。新建一个data目录,将 阅读详情

题目大意:

题目链接:
洛谷:https://www.luogu.org/problemnew/show/P1457
USACO:http://train.usaco.org/usacoprob2?a=K2AezsnHYp9&S=castle


给出一个 m × n m\times n m×n的矩阵,求四个内容:

  1. 联通块的个数
  2. 最大的联通块的块的个数
  3. 去掉任意一扇墙能得到的最大的联通块的块的个数
  4. 去掉哪一面墙得到第3问结果。

其中,第四问有多解时选最靠西的,仍然有多解时选最靠南的。同一格子北边的墙比东边的墙更优先。
这道题的读入很特殊。读入方式请见洛谷说明。(楼上链接)


思路:

额,这道题其实n久以前老师就叫我们做了。但是就是迟迟没有做。知道现在刷USACO才补上。
对于第一问和第二问,就是细胞问题的模板题。
对于第三问和第四问,我们就先枚举每一个格子的北边的墙,再枚举东边的墙,因为“同一格子北边的墙比东边的墙更优先”。
由于“有多解时选最靠西的,仍然有多解时选最靠南的”,所以就要先从左往右枚举每一列(西),再从下往上枚举每一行(南)。
所以枚举的过程是这样的:

 for (int j=1;j<=m;j++)
  for (int i=n;i>1;i--)  //第一行没有北边的墙,可以不用枚举
  {
     处理北边的墙
  }
 for (int j=1;j<m;j++)  //第m列没有东边的墙,可以不用枚举
  for (int i=n;i>=1;i--)
  {
    处理东边的墙
  }

每次如果确定这个格子北边(东边)有墙,就现将这个抢拆掉( a [ i ] [ j ] − = 4 a[i][j]-=4 a[i][j]−=4或 a [ i ] [ j ] − = 2 a[i][j]-=2 a[i][j]−=2),跑一边细胞问题,然后再加回来。


代码:

/*
ID:ssl_zyc2
TASK:castle
LANG:C++
*/

#include <cstdio>
#include <cstring>
#include <algorithm>
#define N 60
using namespace std;

const int dx[]={0,0,-1,0,1};
const int dy[]={0,-1,0,1,0};
const int way[]={0,1,2,4,8};
int a[N][N],n,m,ans,sum,cnt;
bool vis[N][N];

struct node  //记录答案
{
    int x,y;
    char c;
}ANS;

void dfs(int x,int y)  //细胞问题模板
{
    if (x<1||y<1||x>n||y>m) return;
    if (vis[x][y]) return;
    vis[x][y]=1;
    sum++;
    for (int i=1;i<=4;i++)
     if ((a[x][y]&way[i])==0)   //这一面有墙(二进制下按位与)
      dfs(x+dx[i],y+dy[i]);
}

int main()
{
    scanf("%d%d",&m,&n);  //注意是m和n!!!
    for (int i=1;i<=n;i++)
     for (int j=1;j<=m;j++)
      scanf("%d",&a[i][j]);
    for (int i=1;i<=n;i++)
     for (int j=1;j<=m;j++)
      if (!vis[i][j])
      {
      	  sum=0;
      	  dfs(i,j);
      	  ans=max(ans,sum);
      	  cnt++;
      }
    printf("%d\n%d\n",cnt,ans);  //前2问
    ans=0;
    for (int j=1;j<=m;j++)
     for (int i=n;i>1;i--)
     {
     	sum=0;
     	memset(vis,0,sizeof(vis));
     	if ((a[i][j]&2)==0) continue;  //本来就没有这一面墙
     	a[i][j]-=2;  //拆墙
     	dfs(i,j);
     	a[i][j]+=2;
     	if (sum>ans)  //记录最优答案
     	{
     		ans=sum;
     		ANS.c='N';
     		ANS.x=i;
     		ANS.y=j;
        }
     }
    for (int j=1;j<m;j++)
     for (int i=n;i>=1;i--)
     {
     	sum=0;
     	memset(vis,0,sizeof(vis));
     	if ((a[i][j]&4)==0) continue;
     	a[i][j]-=4;
     	dfs(i,j);
     	a[i][j]+=4;
     	if (sum>ans||(sum==ans&&(j<ANS.y||(j==ANS.y&&i>ANS.x))))
     	{
     		ans=sum;
     		ANS.c='E';
     		ANS.x=i;
     		ANS.y=j;
        }
     }
    printf("%d\n%d %d ",ans,ANS.x,ANS.y);
    putchar(ANS.c);
    printf("\n");
    return 0;
}
Code Ocean 上传代码 手把手教程 对于一些学术期刊,录用前会让把代码上传到Code Ocean上,但上传过程可能会遇到一些问题,小编分享一下自己的上传经验。他们会进行验证,验证通过,将自动发布。点此运行即可,但是运行比较慢。 阅读详情

相关推荐

基于C#的软PLC梯形图编辑器开发实战

本文详细介绍了基于C#开发软PLC梯形图编辑器的实战过程。文章从核心数据结构设计入手,阐述了如何利用C#的面向对象特性构建梯形图元素模型,并实现了图形编辑、指令表输入、逻辑连接拓扑重建等关键功能。重点剖析了模拟PLC执行引擎的扫描周期与能流传递算法,让梯形图逻辑在PC上“活”起来。最后探讨了定时器指令实现、性能优化及项目集成等进阶内容,为工业自动化软件集成提供了灵活高效的解决方案。

weixin_28314575的博客 403

【洛谷1457 [usaco 2.1]城堡 The Castle】【深搜】

原题地址:http://www.luogu.org/problem/show?pid=1457 题目描述 我们憨厚的USACO主人公农夫约翰(Farmer John)以无法想象的运气,在他生日那天收到了一份特别的礼物:一张“幸运爱尔兰”(一种彩票)。结果这张彩票让他获得了这次比赛唯一的奖品——坐落于爱尔兰郊外的一座梦幻般的城堡! 喜欢吹嘘的农夫约翰立刻回到有着吹嘘传统的威斯康

redbag的小屋 657

PMSM无感foc控制(滑模-反正切-PLL)【仿真模型搭建教程】(附模型)

本文主要目的是教大家如何把文献中的公式转换成仿真模型。 首先介绍滑模控制的原理及如何搭建simulink模型。 1.1基于反电势估计位置原理 永磁同步电机在静止坐标系αβ下的电压方程: 扩展反电动势包含转子位置信息,并且αβ轴下扩展反电动势的反正切函数正好就等于位置角theta。 1.2 滑模控制原理(比较重要的点是以电机电流模型推导展开) 通过滑模观测得到鲁棒性比较高的αβ轴下扩展反电动势,并求其反正切函数,得到位置信息。 /*********************...

weixin_44769876的博客 1万+

#353. 黑暗城堡

【题目描述】: 在顺利攻破 Lord lsp 的防线之后,lqr 一行人来到了 Lord lsp 的城堡下方。Lord lsp 黑化之后虽然拥有了强大的超能力,能够用意念力制造建筑物,但是智商水平却没怎么增加。现在 lqr 已经搞清楚黑暗城堡有 N 个房间,M 条可以制造的双向通道,以及每条通道的长度。 lqr 深知 Lord lsp 的想法, 为了避免每次都要琢磨两个房间之间的最短路径,Lord...

NOIP提高组日志 344

abaqus 根据坐标施加载荷- Analytical Field 载荷映射

在一些类型的分析中,需要将按位置分布的载荷施加到结构上,比如流体分析导出了结构的气动载荷、或者温度载荷,需要将压强分布、温度分布载荷施加到固体上。这种分析可以使用abaqus中的Analytical Field实现。 1 例子 1.1 结构 一个100*100mm的面,面的载荷分布函数为p=(x2+y2)0.5/((20.5)*100) MPa,即(0, 0)的压强为0,(100, 100)的压强为1。 1.2 载荷 载荷函数:p=(x^2+y^2)^0.5/((2^0.5)*100) in exce.

shengyutou的博客 2万+

Python RPA 流程自动化快速上手

Python RPA 流程自动化快速上手

看花容易绣花难 1万+

#树形dp#洛谷 2014 codevs 1378 jzoj 1486 选课

题目 在N门选修课中选择M门选修课,选修课可能需要学习先修课,求可得到的最大学分。 分析 用树形dp,f[x][v]f[x][v]f[x][v]表示以x为根的子树中选修v门课的最大学分, f[x][v]=max∑numi=1ci=v−1(f[son][ci])+score[x]f[x][v]=max∑i=1numci=v−1(f[son][ci])+score[x]f[x][v]=...

lemondinosaur的博客 295

C#上位机开发揭秘:从新手到大神的蜕变之路,代码实例全解析!

上位机通常是与硬件设备(如嵌入式系统、PLC、传感器等)进行通信的计算机程序。它的作用是通过某种通信协议(如串口、TCP/IP 等)向设备发送命令,并接收设备的反馈数据。上位机需要有一个图形用户界面(GUI)来展示数据或控制硬件设备。通过本篇教程,我们介绍了 C# 上位机开发的基本步骤,从串口通信的实现,到图形用户界面的构建,再到进阶功能的实现。作为上位机开发的新手,掌握这些基础知识是非常重要的。而随着经验的积累,你可以逐步尝试更复杂的功能,比如多线程处理、数据分析与存储等。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 4828

洛谷 P1457 [USACO2.1]城堡 The Castle (搜索,枚举)

https://www.luogu.com.cn/problem/P1457 思路 深搜求出各个房间编号以及大小,前两问解决,三四问,枚举要拆的墙,当然每堵能拆的墙都能转换为相邻某区域的北面或东面,所以只用枚举这两个面,然后按照题目的优先级做好判断,有些坑,第一遍只得了75,下了数据看才知道有地方疏忽了。 代码 #include <bits/stdc++.h> using namespace std; const int N = 52; int n, m; int num, mx, nmx.

We have to be very hard to reach the top. 775

Isaac Lab 强化学习全身控制策略 Sim2Real 宇树人形机器人训练部署 HOVER

《IsaacLab策略训练与部署指南》提供了在仿真和真实机器人上实现HOVER全身控制策略的完整流程。主要内容包括:1) Linux环境下的IsaacLab安装与HOVER资源库配置;2) 使用1024个并行环境训练教师/学生策略的详细步骤;3) 策略测试与评估方法;4) Sim2Sim仿真验证和Sim2Real真实机器人部署方案。本教程特别针对Unitree H1仿人机器人,包含运动数据准备、策略训练、性能评估到硬件部署的全链条实现方案,为机器人控制策略开发提供标准化参考框架。

机器人控制与仿真应用 3068

萤石云cs刷机解绑固件

萤石CS-C2C-32WFR刷机包,萤石CS-C6TC刷机包,萤石CS-C6H刷机包,萤石猫眼产品等等。萤石云摄像头固件修改,绑定手机号解绑,更换序列号教程。

海康威视技术支持 2万+

洛谷 P1457 城堡 The Castle\USACO 2.1.1

玄学之门题目:分析:代码: 题目: 传送门 分析: 作为USACOUSACOUSACO中的2.12.12.1的第一题,难度还是十分合格的:) 不知道为什么洛谷上的难度是提高+,可能主要是由于码长的问题吧 大体的思路是先通过dfsdfsdfs染色,然后枚举墙,求出答案 代码: #include&lt;cstdio&gt; #include&lt;iostream&gt; #include&lt;al...

qq_35786326的博客 490

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

洛谷—— P1457 城堡 The Castle

https://www.luogu.org/problem/show?pid=1457 题目描述 我们憨厚的USACO主人公农夫约翰(Farmer John)以无法想象的运气,在他生日那天收到了一份特别的礼物:一张“幸运爱尔兰”(一种彩票)。结果这张彩票让他获得了这次比赛唯一的奖品——坐落于爱尔兰郊外的一座梦幻般的城堡! 喜欢吹嘘的农夫约翰立刻回到有着吹嘘传统的威斯康辛老家开始吹嘘...

agcozdwdfvds08078的博客 140

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

P1457 城堡 The Castle【洛谷算法习题】

本文介绍了USACO题目P1457"城堡The Castle"的解题思路。题目要求统计城堡的房间数、最大房间面积,以及通过拆除一面墙能获得的最大房间面积和最佳拆除位置。解题方法采用洪水填充算法划分连通房间,并枚举所有内部墙计算拆墙后的合并效果。关键步骤包括:1)二进制解码墙体信息;2)DFS标记连通房间;3)遍历所有可能的墙计算合并面积;4)按题目规则选择最优拆除位置(最西优先、最南次之、北墙优于东墙)。算法时间复杂度为O(n×m),适用于50×50的数据规模。

Pretty Boy Fox的博客 308

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

洛谷P1457 城堡(The Castle)

洛谷1457 城堡 本题地址: http://www.luogu.org/problem/show?pid=1457 题目描述 我们憨厚的USACO主人公农夫约翰(Farmer John)以无法想象的运气,在他生日那天收到了一份特别的礼物:一张“幸运爱尔兰”(一种彩票)。结果这张彩票让他获得了这次比赛唯一的奖品——坐落于爱尔兰郊外的一座梦幻般的城堡! 喜欢吹嘘的农夫约翰立刻回到有着吹嘘传统

hahalidaxin的专栏 465

洛谷P1457 城堡 The Castle

P1457 城堡 The Castle 137通过 279提交 题目提供者该用户不存在 标签USACO 难度提高+/省选- 提交讨论题解 最新讨论 暂时没有讨论 题目描述 我们憨厚的USACO主人公农夫约翰(Farmer John)以无法想象的运气,在他生日那天收到了一份特别的礼物:一张“幸运爱尔兰”(一种彩票)。结果这张彩票让他获...

weixin_30426879的博客 104

洛谷 P1457 城堡 The Castle 解题报告

P1457 城堡 The Castle 题目描述 我们憨厚的USACO主人公农夫约翰(Farmer John)以无法想象的运气,在他生日那天收到了一份特别的礼物:一张“幸运爱尔兰”(一种彩票)。结果这张彩票让他获得了这次比赛唯一的奖品——坐落于爱尔兰郊外的一座梦幻般的城堡! 喜欢吹嘘的农夫约翰立刻回到有着吹嘘传统的威斯康辛老家开始吹嘘了, 农夫约翰想要告诉他的奶牛们关于他城堡的一切。他需要做一些吹...

weixin_30918415的博客 373

P1457 城堡 The Castle

题目描述 我们憨厚的USACO主人公农夫约翰(Farmer John)以无法想象的运气,在他生日那天收到了一份特别的礼物:一张“幸运爱尔兰”(一种彩票)。结果这张彩票让他获得了这次比赛唯一的奖品——坐落于爱尔兰郊外的一座梦幻般的城堡! 喜欢吹嘘的农夫约翰立刻回到有着吹嘘传统的威斯康辛老家开始吹嘘了, 农夫约翰想要告诉他的奶牛们关于他城堡的一切。他需要做一些吹嘘前的准备工作:比如说知道城堡有多少...

weixin_30920513的博客 138

USACO/Healthy Holsteins (经典的DFS题目)

健康的好斯坦奶牛            农民JOHN以拥有世界上最健康的奶牛为骄傲。他知道每种饲料中所包含的的牛所需的最低的维他命量是多少。请你帮助农夫喂养他的牛,以保持他们的健康,使喂给牛的饲料的种数最少。   给出牛所需的最低的维他命,输出喂给牛需要哪些种类的饲料。    PROGRAM NAME: holstein INPUT FORMAT 第1行:一个整数V(1 第2行

1119

洛谷P1457-城堡(图论练习题)

题目链接 思路 其实这道题我在洛谷上已经写了题解了(SSL_XXY_BlackCloud是我洛谷的账号。。。),不过还是习惯在这边发一篇。。。 首先,输入的时候把每个方格周围是否有墙壁保存下来,用一个三维数组wall表示。 w[i][j][1]=true表示北面有墙。 w[i][j][2]=true表示南面有墙。 w[i][j][3]=false表示西面没有墙。 w[i][j][4]

Ajwallet 740

洛谷 P3072 [USACO13FEB]Perimeter S(dfs)

题目保证所有的草堆构成连通块,我们可以用 dfs 很简单的获得各个草堆的相对位置 如上图所示,白色的方块为草堆的位置,那么他的外周长是绿色的方块个数,其中红色方块个数的贡献是二,也就是说绕着外周长的外面走一圈,看看当前方格挨着几个草堆,这样通过 dfs 就可以将问题解决了。 遍历所有的绿色/红色方块一次且仅以此,搜索到白色那么 ans+1,此方块的任务结束 const int N=2e5+5; int n,m; int i,j,k; //int a[N];...

C_Dreamy的博客 580

洛谷_P1457 [USACO2.1]城堡 The Castle (尚贤)

【题目】:https://www.luogu.com.cn/problem/P1457 #include <cstdio> #include <iostream> #include <cstring> #include <queue> #define max(a, b) ((a > b) ? a : b) #define SIZE 50 + 5...

广东省清远市博爱学校—尚贤的博客 801

【USACO4-1-2】篱笆回路 dfs

原题#include&lt;iostream&gt; #include&lt;algorithm&gt; #include&lt;cstdio&gt; #include&lt;cstring&gt; using namespace std; #define inf 0x3f3f3f3f #define N 5009 int link[N][N]; int a[N],visit[N],head...

Mininda 330

洛谷 P5194 [USACO05DEC]Scales S(DFS)

文章目录题目描述输入格式输入输出样例分析AC的C++代码 题目描述 约翰有一架用来称牛的体重的天平。与之配套的是 NNN ( 1≤N≤10001 \leq N \leq 10001≤N≤1000 )个已知质量的砝码(所有砝码质量的数值都在32位带符号整数范围内)。 每次称牛时,他都把某头奶牛安置在天平的某一边,然后往天平另一边加砝码,直到天平平衡,于是此时砝码的总质量就是牛的质量(约翰不能把砝码放到奶牛的那边,因为奶牛不喜欢称体重,每当约翰把砝码放到她的蹄子底下,她就会尝试把砝码踢到约翰脸上)。 天平能承受

Running Snail 962

洛谷P1457 城堡 The Castle /1104 USACO 2.1 城堡 (foodfill)

题目链接: 洛谷 学校OJ 读题 当初看到这道题时,我的内心是奔溃的: 什么魔鬼输入?! 什么恶心要求?! 我 *(数据删除) 算了,还是好好做题吧。 输入处理 通过观察,我们可以知道每一个数都可以这样分解 假设某行有一个数111111,我们可以:把它拆成二进制: 11= 1 0 1 1 1/表示南面有墙 0/表示东面没有墙 1/表示北面有墙 1/表示西面有墙 所以我们可以设一个布尔类型三维数组a...

weixin_45523071的博客 555

usaco training 6.5 棋盘挑战 DFS

原题链接 思路 1.dfs经典题N-皇后问题的变形,用全排列的方式来枚举,记录结果即可 2.我们可以发现,对于N*N的棋盘,正好放N个,每行一个,然后枚举每行放置的位置并记录 3.满足什么条件就可以放,就是列,两条斜对角线都没有棋子的情况,就可以放 4.因为要求所有的情况,所以每次记得还原 AC代码 #include <iostream> using namespace std; const int N = 15; int n; bool col[N], d[N * 2], ud[

qq_44791484的博客 235
上一篇: 【USACO1.6】解题报告
下一篇: 【CODEVS1036】商务旅行【LCA】
stoorz1023
博客等级 码龄9年 101粉丝 595原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值