Submission #1281060

#TimeUsernameProblemLanguageResultExecution timeMemory
1281060silence25T-Covering (eJOI19_covering)C++20
100 / 100
255 ms60612 KiB
#include "bits/stdc++.h"
#define ll long long
#define pb push_back
#define ff first
#define ss second
#define all(v) v.begin(),v.end()
#define rall(v) v.rbegin(),v.rend()
using namespace std;
const long long maxn = 2e6+5;
const long long px[4]={0,0,-1,1};
const long long py[4]={1,-1,0,0};
long long n,m;
long long cnt;
long long a[maxn];
bool b[maxn];
bool vis[maxn];
vector<long long>g[maxn];
vector<long long>v;
void merge(long long i1,long long j1,long long i2,long long j2){
	if(i2 > n || j2 > m || !i2 || !j2)
		return;
	long long pos1 = i1*m + j1;
	long long pos2 = i2*m + j2;
	g[pos1].pb(pos2);
	g[pos2].pb(pos1);
	return;
}
void dfs(long long pos){
	vis[pos] = true;
	if(b[pos])
		++ cnt;
	else
		v.pb(a[pos]);
	for(auto it:g[pos]){
		if(vis[it])
			continue;
		else
			dfs(it);
	}
	return;
}
void solve(){
	cin>>n>>m;
	for(long long i = 1;i<=n;++i)
		for(long long j = 1;j<=m;++j)
			cin>>a[i*m+j];
	long long q;
	long long ans = 0;
	cin>>q;
	while(q--){
		long long i,j;
		cin>>i>>j;
		++i;
		++j;
		b[i*m+j] = true;
		ans += a[i*m+j];
		for(long long k = 0;k<4;++k)
			merge(i,j,i+px[k],j+py[k]);
	}
	for(long long i = 1;i<=n;++i){
		for(long long j = 1;j<=m;++j){
			long long pos = i * m + j;
			if(vis[pos])
				continue;
			dfs(pos);
			if(cnt * 3 > v.size()){
				cout<<"No";
				return;
			}
			sort(all(v));
			reverse(all(v));
			for(long long k = 0;k<cnt*3;++k)
				ans += v[k];
			v.clear();
			cnt = 0;
		}
	}
	cout<<ans;
}
int main(){
	// freopen("file.in","r",stdin);
	ios::sync_with_stdio(false);
	cin.tie(nullptr);
	solve();
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...