#include <bits/stdc++.h>
#include <random>
using namespace std;
using ll = int;
using ld = long double;
ll INF = 1e9;
const ll MX = 3001;
vector<vector<pair<ll, ll>>> g;
vector<ll> p_g;
vector<ll> p_w;
vector<ll> used;
ll tt = 1;
bool kun(ll v) {
if (used[v] == tt) {
return false;
}
used[v] = tt;
for (ll i = 0; i < g[v].size(); i++) {
if (p_g[g[v][i].first] == -1 && p_w[g[v][i].second] == -1) {
p_g[g[v][i].first] = v;
p_w[g[v][i].second] = v;
return true;
}
}
for (ll i = 0; i < g[v].size(); i++) {
if (p_g[g[v][i].first] != -1) {
if (kun(p_g[g[v][i].first])) {
if (p_w[g[v][i].second] != -1) {
if (kun(p_w[g[v][i].second])) {
p_g[g[v][i].first] = v;
p_w[g[v][i].second] = v;
return true;
} else {
p_g[g[v][i].first] = -1;
}
} else {
p_g[g[v][i].first] = v;
p_w[g[v][i].second] = v;
return true;
}
}
}
}
return false;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
ll n, m;
cin >> n >> m;
ll v1 = 0, v2 = 0, v3 = 0;
vector<string> s(n);
vector<vector<ll>> color(n, vector<ll>(m));
for (ll i = 0; i < n; i++) {
cin >> s[i];
}
for (ll i = 0; i < n; i++) {
for (ll j = 0; j < m; j++) {
if (s[i][j] == 'R') {
color[i][j] = v1;
v1++;
}
if (s[i][j] == 'G') {
color[i][j] = v2;
v2++;
}
if (s[i][j] == 'W') {
color[i][j] = v3;
v3++;
}
}
}
used.assign(v1 + 1, {});
g.assign(v1 + 1, {});
p_g.assign(v2 + 1, -1);
p_w.assign(v3 + 1, -1);
for (ll i = 0; i < n; i++) {
for (ll j = 0; j < m; j++) {
if (s[i][j] == 'R') {
if (j + 2 < m) {
if (s[i][j + 1] == 'G' && s[i][j + 2] == 'W') {
g[color[i][j]].emplace_back(color[i][j + 1], color[i][j + 2]);
}
}
if (i + 2 < n) {
if (s[i + 1][j] == 'G' && s[i + 2][j] == 'W') {
g[color[i][j]].emplace_back(color[i + 1][j], color[i + 2][j]);
}
}
}
}
}
ll ans = 0;
for (ll i = 0; i < g.size(); i++) {
tt++;
if (kun(i)) {
ans++;
}
}
cout << ans;
}
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |