首页 > 其他分享 >洛谷 P1506 拯救oibh总部(DFS / 染色法)

洛谷 P1506 拯救oibh总部(DFS / 染色法)

时间:2022-10-01 22:00:25浏览次数:95  
标签:00 洛谷 P1506 oibh LL typedef 染色法

https://www.luogu.com.cn/problem/P1506

题目描述
给定 n*m 的图形,由 * 和 0 组成。

让我们求出被*四面包围了的0的数量。
输入 #1 
4 5
00000
00*00
0*0*0
00*00
输出 #1 
1

输入 #2 
5 5
*****
*0*0*
**0**
*0*0*
*****
输出 #2 
5

也能叫染色法?

  • 这道题目需要我们需要被包围住的‘0’的数量,所以我们必须要从外围爆搜

  • 但是必须要注意的一个点就是:如果一开始是‘0’和一开始是‘*’的情况是会完全不一样的

  • 所以我们可以直接把外围扩大一圈,这样就能保证外围一定是洪水了

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
typedef pair<int,int> PII;
const int N=200200,M=2002;
LL dx[]={-1,0,0,1},dy[]={0,-1,1,0};
LL n,m,ans=0;
char a[M][M];
void dfs(LL x,LL y)
{
    //边界条件
    if(x<0||x>n+1||y<0||y>m+1||a[x][y]=='*')
        return;
    a[x][y]='*';//表示这里我已经跑过了
    for(LL i=0;i<4;i++)
    {
        dfs(x+dx[i],y+dy[i]);
    }
}
int main()
{
    cin.tie(0); cout.tie(0); ios::sync_with_stdio(false);
    int T=1;
    //cin>>T;
    while(T--)
    {
        cin>>n>>m;
        for(LL i=1;i<=n;i++)
            for(LL j=1;j<=m;j++)
            cin>>a[i][j];
        dfs(0,0);//从第一个点开始爆搜
        for(LL i=1;i<=n;i++)
        {
            for(LL j=1;j<=m;j++)
            {
                //把答案全部都涂成别的颜色,剩下来的就是答案
                if(a[i][j]=='0') ans++;
            }
        }
        cout<<ans<<endl;
    }
    return 0;
}

标签:00,洛谷,P1506,oibh,LL,typedef,染色法
From: https://www.cnblogs.com/Vivian-0918/p/16747867.html

相关文章

  • 洛谷 P2709 小B的询问 题解
    莫队板子。//P2709小B的询问#include<bits/stdc++.h>usingnamespacestd;typedeflonglongll;constintMAXN=50005;structQuery{ intl,r,id;}q[MAXN];in......
  • 洛谷 P2419 [USACO08JAN]Cow Contest S(最短路:floyed)
    https://www.luogu.com.cn/problem/P2419题目大意:给定n头奶牛(1<=N<=100),按1..N依次编号。m轮:两两之间进行对决,赢了的排在左边,输了的排在右边。我们想知道奶牛们编......
  • 洛谷P8551 Bassline 题解
    P8551Bassline题解分析这道题做月赛的时候想了好久,最后发现其实很简单。我们用样例数据来分析:如图所示,我们将每个区间抽象化为一个一个的长条。题目给我们的两个要......
  • 洛谷 P7861 SAVEZ 题解(哈希)
    2020牛客杯NOIP赛前集训提高第一场T2牛牛的猜球游戏题解目录2020牛客杯NOIP赛前集训提高第一场T2牛牛的猜球游戏题解比赛链接题目题目描述输入格式输出格式样例样例......
  • P2671 [NOIP2015 普及组] 求和(洛谷前缀和
    P2671[NOIP2015普及组]求和1//(x+z)*(num[x]+num[z])=2//(x1+x2)*(y1+y2)+(x1+x3)*(y1+y3)+(x2+x3)*(y2+y3)3//=x1*(y1*(n-2)+y1+y2+...+yn)4//+x2*(y2*......
  • 洛谷 P3193 [HNOI2008]GT考试
    原题链接dp+矩阵加速明天再来写#pragmaGCCoptimize(2)#include<bits/stdc++.h>usingnamespacestd;#definefrfirst#definesesecond#defineet0exit(0);#......
  • 洛谷 P1164 小A点菜(DP:01背包)
    https://www.luogu.com.cn/problem/P1164题目大意:给定n种菜品(每种菜品只有1份),m块钱;问我们花完了这m块钱可以点的不同种类的菜品有多少种方案数?输入441122输......
  • 洛谷 P1667
    这种奇怪的在数列上操作,看看在前缀和/差分数组上发生了什么事往往能发现新大陆。考虑\(a\)的前缀和\(S\),不难发现操作\([l,r]\)就是交换\(S_{l-1},S_r\)。所以最......
  • 洛谷 P7774 [COCI2009-2010#2] KUTEVI(DP:完全背包)
    https://www.luogu.com.cn/problem/P7774题目大意:给定n个已知角度a[1],a[2],,,a[n];给定m个需要我们去拼凑的角度b[1],b[2],,,b[m];数组a中的角度可以使用任意多次,从......
  • 洛谷 CF1257F Make Them Similar 灰 题解
    前言本题解采用折半搜索算法完成,对于不打算用这种方法的同学,这篇题解可能会浪费你人生中宝贵的十几分钟。思路此题似乎找不出什么好的性质,那么考虑暴力。发现\(x,a\)......