Submission #1158747

#TimeUsernameProblemLanguageResultExecution timeMemory
1158747brover29Dango Maker (JOI18_dango_maker)C++17
13 / 100
32 ms71168 KiB
#include <bits/stdc++.h>
//qwerty47924692
using namespace std;
using ll = int;
const ll N=3005;
const ll M=N*N/3;
const string br="617283";
#define sz(a)(ll)a.size()
#define f first
#define s second
ll dp[N][N],pos[N][N];
char c[N][N];
ll n,m;
struct dango{
    vector<pair<ll,ll>>v;

};
bool equ(dango a,dango b){
    for(auto i:a.v){
        for(auto j:b.v){
            if(i==j)return 1;
        }
    }
    return 0;
}
vector<ll>g[M];
vector<ll>lft;
ll w[M],pr[M],l[N],r[N];
bool try_kunh(ll v){
    if(w[v])return 0;
	w[v]=1;
	for(ll to:g[v])
		if (!l[to]){
			l[to]=v;
			r[v]=to;
			return 1;
		}
	for(ll to:g[v])
		if (try_kunh(l[to])){
			l[to]=v;
			r[v]=to;
			return 1;
		}
	return 0;
}
ll kunh(){
    ll ans=0;
    for(ll ch=1;ch;){
        ch=0;
        for(ll i:lft)w[i]=0;
        for(ll i:lft){
            if(r[i])continue;
            if(try_kunh(i)){
                ans++;
                ch=1;
            }
        }
    }return ans;
}ll sz,cnt;
void dfs(ll v,ll k=0){
    w[v]=1;
    sz++;
    k^=1;
    cnt+=k;
    for(ll to:g[v]){
        if(w[to])continue;
        dfs(to,k);
    }
}
vector<dango>a;
ll ans=0,used[N][N];

int main(){
    ios_base::sync_with_stdio(0);
    cin.tie(0);

    cin>>n>>m;
    for(ll i=1;i<=n;i++){
        for(ll j=1;j<=m;j++){
            cin>>c[i][j];
        }
    }for(ll i=1;i<=n;i++){
        for(ll j=1;j<=m;j++){
            if(c[i][j]=='R'&&c[i][j+1]=='G'&&c[i][j+2]=='W'){
                vector<pair<ll,ll>>v={make_pair(i,j),make_pair(i,j+1),make_pair(i,j+2)};
                dango x;
                x.v=v;
                a.push_back(x);
                lft.push_back(a.size());
            }if(c[i][j]=='R'&&c[i+1][j]=='G'&&c[i+2][j]=='W'){
                vector<pair<ll,ll>>v;
                v={{i,j},{i+1,j},{i+2,j}};
                dango x;
                x.v=v;
                a.push_back(x);
                ll n=a.size();
                pos[i][j]=pos[i+1][j]=pos[i+2][j]=n;

            }

        }
    }
    for(ll i=0;i<lft.size();i++){
        ll u=lft[i];
    //    cout<<u<<' ';
        for(auto j:a[u-1].v){
            ll x=pos[j.f][j.s];
            if(!x)continue;
            g[u].push_back(x);
            g[x].push_back(u);
        }
    }ll ans=0;
    for(ll i=1;i<=a.size();i++){
        if(w[i])continue;
        sz=0;
        cnt=0;
        dfs(i,0);
        ans+=max(cnt,sz-cnt);
    }
    cout<<ans;

}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...