#include <bits/stdc++.h>
#include <unordered_map>
#include <unordered_set>
using namespace std;
typedef unsigned long long ull;
typedef long long ll;
typedef long double ld;
typedef vector <int> vi;
typedef vector <ll> vll;
typedef vector <string> vs;
typedef vector <vector <int>> vvi;
typedef vector <vll> vvll;
typedef map<int, int> mi;
typedef map<string, int> ms;
typedef map<char, int> mc;
typedef map <int, bool> mb;
typedef map<ll, ll> mll;
typedef unordered_map<int, int> umi;
typedef unordered_map<string, int> ums;
typedef unordered_map<char, int> umc;
typedef unordered_map <int, bool> umb;
typedef unordered_map<ll, ll> umll;
typedef vector <ld> vld;
typedef vector <bool> vb;
typedef pair <int, int> pii;
typedef pair<ll, ll> pll;
typedef vector <pii> vpii;
typedef vector <pll> vpll;
#define FOR(i,N) for(ll i = 0 ; i < N;i++)
#define eFOR(i,a,b) for(ll i = a; i <=b;i++)
#define dFOR(i,N) for(ll i = N - 1; i>=0;i--)
#define edFOR(i,b,a) for(ll i = b ; i >=a;i--)
#define all(x) x.begin(),x.end()
#define SORT(x) sort(all(x))
#define RSORT(x) sort(x.rbegin(), x.rend())
#define UNQ(x)  unique(all(x))
#define mine(x) min_element(all(x))
#define maxe(x) max_element(all(x))
#define lb(v, x) lower_bound(all(v) , x)
#define ub(v, x) upper_bound(all(v) , x)
#define pb push_back
#define FIX cout << fixed << setprecision(15)
#define g(i , a) get<i>(a)
const long double PI = 3.141592653589793;
const ll mod = 1e9 + 7;
int CASE = 1;
const int mxn = 1e5 + 1;
const ll infll = 1e18;
const int infi = 1e9;
bool prime(ll n)
{
    if (n <= 1)
        return false;
    if (n == 2 or n == 3)
        return true;
    if (n % 2 == 0 or n % 3 == 0)
        return false;
    for (ll i = 5; i * i <= n; i += 6)
        if (n % i == 0 || n % (i + 2) == 0)
            return false;
    return true;
}
ll __gcd(ll a, ll b)
{
    return !b ? a : __gcd(b, a % b);
}
ll power(ll a, ll b)
{
    ll x = a, res = 1, p = b;
    while (p > 0)
    {
        if (p & 1)
            res *= x;
        x *= x;
        p >>= 1;
    }
    return res;
}
vi dp;
vvi pos;
int cnt = 0;
vs v;
vi dx = { -1 ,1 , 0 ,0 };
vi dy = { 0 , 0 , -1, 1 };
vector <vb> vis;
void dfs(int x, int y)
{
    if (x < 0 || x >= v.size() || y < 0 || y >= v[0].size())
        return;
    if (vis[x][y] || v[x][y] == '.')
        return;
    vis[x][y] = true;
    pos[x][y] = cnt;
    for (int i = 0; i < 4; i++)
        dfs(x + dx[i], y + dy[i]);
}
void solve()
{
    int n, m;
    cin >> n >> m;
    v = vs(n);
    FOR(i, n)
        cin >> v[i];
    vis = vector<vb>(n, vb(m, false));
    pos = vvi(n, vi(m, 0));
    FOR(i, n)
    {
        FOR(j, m)
        {
            if (v[i][j] == '*' && pos[i][j] == 0)
            {
                cnt++;
                dfs(i, j);
            }
        }
    }
    int ans = 0;
    FOR(i, n)
    {
        FOR(j, m)
        {
            ans = max(ans, pos[i][j]);
        }
    }
    cout << ans;
}
int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    int T = 1;
    while (T--)
    {
        solve();
    }
    return 0;
}
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... |