#include <iostream>
#include <vector>
#include <unordered_map>
#include <algorithm>
using namespace std;
int n,m,k,x,y;
vector<int> mat;
unordered_map<int,bool> vis,este;
vector<vector<int>> graf;
vector<int> cate;
int ans=0,centre;
int di[]={1,0,-1,0};
int dj[]={0,1,0,-1};
bool inmat(int i,int j)
{
return i>=0 && j>=0 && i<n && j<m;
}
void dfs(int cur)
{
vis[cur]=1;
if(!este[cur])
cate.push_back(mat[cur]);
else{
centre++;
}
for(auto urm:graf[cur])
{
if(!vis[urm])
dfs(urm);
}
}
int main()
{
cin>>n>>m;
mat.resize(n*m+10);
graf.resize(n*m+10);
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
int aux=i*m+j;
cin>>mat[aux];
este[aux]=0;
vis[aux]=0;
}
}
cin>>k;
for(int i=1;i<=k;i++)
{
cin>>x>>y;
int aux=x*m+y;
este[aux]=true;
ans+=mat[aux];
for(int d=0;d<4;d++)
{
int urm1=x+di[d];
int urm2=y+dj[d];
if(inmat(urm1,urm2)){
int auxx=urm1*m+urm2;
graf[aux].push_back(auxx);
graf[auxx].push_back(aux);
}
}
}
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
int aux=i*m+j;
if(!vis[aux] && este[aux])
{
centre=0;
cate.clear();
dfs(aux);
if(int(cate.size())<centre*3){
cout<<"No";
return 0;
}
sort(cate.begin() , cate.end());
for(int care=1;care<=3*centre;care++){
ans+=cate[int(cate.size())-care];
}
}
}
}
cout<<ans;
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |