首页 > 其他分享 >华中师范大学2023新生赛 D 身无彩凤双飞翼 题解

华中师范大学2023新生赛 D 身无彩凤双飞翼 题解

时间:2023-12-19 11:27:24浏览次数:28  
标签:连通 ch int 题解 maxn 答案 2023 凤双飞

Link

华中师范大学2023新生赛 D 身无彩凤双飞翼

Question

给出一个 \(n\times m\) 的网格,网格上有一些障碍,问最少添加多少障碍才能使 \((1,1)\) 和 \((n,m)\) 不连通

Solution

我好像用了一种和标答不一样的写法

我们先对图 bfs 一次,如果 \((1,1)\) 不能到达 \((n,m)\) ,则图本来就不连通,需要添加 \(0\) 个障碍

然后把一条 \((1,1)\) 到 \((n,m)\) 的路径堵上,再次 bfs,如果还是连通,则答案就是 \(2\),否则答案 就是 \(1\)

答案不可能大于 \(2\),把 \((1,2)\) 和 \((2,1)\) 堵上就不可能连通了


标答是这么写的

设 \(f[i][j]\) 表示从 \((1,1)\) 走到 \((i,j)\) 的方案数,\(g[i][j]\) 表示从 \((n,m)\) 走到 \((i,j)\) 的方案数。

如果左上角走不到右下角,则答案为 \(0\)

如果存在某个位置,满足 \(f[i][j]\times g[i][j]\) 等于总方案数,则答案为 \(1\)。

否则答案为 \(2\)

考虑到方案数比较多,判断答案为 \(1\) 时需要用到哈希

Code

#include<bits/stdc++.h>
using namespace std;
const int maxn=1005;

int n,m,k;
int b[maxn][maxn];
int vis[maxn][maxn];
struct node{int x,y;}pre[maxn][maxn];

int read(){
    int ret=0,f=1;char ch=getchar();
    while(ch<'0'||ch>'9'){if(ch=='-') f=-1;ch=getchar();}
    while(ch>='0'&&ch<='9'){ret=ret*10+ch-'0';ch=getchar();}
    return ret*f;
}

bool bfs(){
    queue<node> q;
    for(int i=1;i<=n;i++)
    for(int j=1;j<=m;j++)
        vis[i][j]=(b[i][j]);
    q.push((node){1,1});vis[1][1]=0;
    while(!q.empty()){
        int x=q.front().x,y=q.front().y;q.pop();int x_,y_;

        if(x==n&&y==m) {
            while(1) {
                node pre_node=pre[x][y];
                if(pre_node.x==1&&pre_node.y==1) return 1;
                else x=pre_node.x,y=pre_node.y;
                b[x][y]=1;
            }
        }

        x_,y_;x_=x+1,y_=y;
        if(x_<=n&&y_<=m&&vis[x_][y_]==0){
            q.push((node){x_,y_});
            vis[x_][y_]=1;pre[x_][y_]=(node){x,y};
        }

        x_,y_;x_=x,y_=y+1;
        if(x_<=n&&y_<=m&&vis[x_][y_]==0){
            q.push((node){x_,y_});
            vis[x_][y_]=1;pre[x_][y_]=(node){x,y};
        }
    }
    return 0;
}

int main(){
    freopen("D.in","r",stdin);
    n=read(),m=read(),k=read();
    for(int i=1;i<=k;i++){
        int x=read(),y=read();
        b[x][y]=1;
    }
    if(!bfs()) printf("0\n");
    else if(!bfs()) printf("1\n");
    else printf("2\n");
    return 0;
}

标签:连通,ch,int,题解,maxn,答案,2023,凤双飞
From: https://www.cnblogs.com/martian148/p/17913248.html

相关文章

  • CF1905 B Begginer's Zelda 题解
    LinkCF1905BBegginer'sZeldaQuestion给出一棵树,每次能把一条路径压缩成一个点,求最少几次把树压缩成一个点Solution贪心的想,路径肯定越长越好,所以肯定是以一个儿子节点为起点,以一个儿子节点为终点,儿子节点合并了儿子到根的父节点也合并了,每次合并两个儿子节点,假设儿子节点......
  • 【题解】CodeForces-1913
    CodeForces-1913ARatingIncrease依题意模拟。提交记录:Submission-CodeForcesCodeForces-1913BSwapandDelete交换免费就是能任意重排,从头开始尽量填相反的,剩下只能删去了。提交记录:Submission-CodeForcesCodeForces-1913CGamewithMultiset从大到小能减则减一定......
  • 如何扩充知识广深度:以强网杯2023谍影重重2.0为例
    附件截图 通过筛选,提取tcp流量,得到:抛开弯弯曲曲的思考过程,直接来看wp:(by:战队:Arr3stY0u)  好,直接解码得到结果的。好像这题就做完了?思考以下几个问题:1.为什么别人能马上知道是ADS-B?下次比赛过程期间我能不能也查到一些未知的协议?2.为什么一个协议马上就......
  • 【题解】CodeForces-1905
    CodeForces-1905AConstructiveProblems发现沿着对角线放就行了,答案是\(\max(n+m)\)。提交记录:Submission-CodeForcesCodeForces-1905BBegginer'sZelda最优操作每次删两个叶子(除了最后一次只剩两个节点),所以答案是叶子个数除以二上取整。提交记录:Submission-CodeForc......
  • 【2023-12-18】体感冬天
    20:00一个勇往直前、从不退缩的人绝不会怀疑云彩会从头上掉下来,绝不会想到XieE能胜利,而正义遭到挫败,他认为跌倒是为了爬起,受挫是为了更好的战斗,就寝是为了醒来。                                    ......
  • 做题记录202312
    模拟赛题题意:将长度为\(n\le10^{18}\)插入间隔,要求每个(所有空格小于等于\(k\le50\))的连续段段内必须有一个段空格为\(k\),求方案数矩阵快速幂可以预处理,复杂度变为\(O(n^2(n+T)logn)\)对于过于繁杂的边界和细节问题,可以先求出一个大致,统计答案的时候再进行修正,这里统......
  • 【专题】2023年即时零售行业发展报告PDF合集分享(附原数据表)
    原文链接:https://tecdat.cn/?p=34588原文出处:拓端数据部落公众号即时零售是一种通过线上即时下单、线下即时履约的零售业态,它依托本地零售供给,满足本地即时需求。这种业态是“零售+科技”的产物,实现了交易流程线上化、履约配送便利化,提升了本地供给能力,拓展了消费需求。近年来,即......
  • 2023.12.18
    点击查看代码#include<bits/stdc++.h>#definefifirst#definesesecondusingstd::cin;usingstd::min;usingstd::max;usingstd::cout;usingstd::vector;constexprintM=2e6+5;constexprintINF=0x3f3f3f3f,mod=998244353;......
  • 2023年12月18日总结
    更好的观看总结冬月初六,天气还是很寒冷。好在教室里面开了空调,还是很暖和。一眼今天的内容,技巧与思想?分治、启发式合并、分块算法、莫队算法、CDQ分治、整体二分?难以言表。洛谷首页的做题计划还鸽了好多题啊!做不完啊。先来一道dp的题目。P8820[CSP-S2022]数据传输之前......
  • 20231218
    今天时Java程序设计考试,题目还好,比较麻烦的点就是第二个表的键值很多,审核的流程很好,但是我没有做完。做题的时候遇到了些问题,比如关于部门(Department)的处理,本来是想作为一个实体,但是题目中的部门是固定的,最后为了省事又改成了枚举,关于用户的管理题目中也没有说清楚,是由哪个角色......