# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
1250130 | Petrix | T-Covering (eJOI19_covering) | C++20 | 0 ms | 0 KiB |
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
#define int long long
int n,m,cnt;
vector<int> v1,v[1000001];
int viz[1000001];
int a[1000001];
int b[1000001];
void dfs(int nod){
int i;
if(viz[nod]) return;
viz[nod]=1;
if(b[nod]==1) cnt++;
else v1.push_back(-a[nod]);
for(i=0;i<v[nod].size();i++) {
dfs(v[nod][i]);
}
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
int i,a1,b1,k,j,rasp=0;
cin>>n>>m;
for(i=1;i<=n;i++){
for(j=1;j<=m;j++){
cin>>a1;
a[(i-1)*m+j]=a1;
}
}
cin>>k;
for(i=1;i<=k;i++) {
cin>>a1>>b1;a1++;b1++;
rasp+=a[(a1-1)*m+b1];b[(a1-1)*m+b1]=1;
if(a1>1){
v[(a1-1)*m+b1].push_back((a1-2)*m+b1);
v[(a1-2)*m+b1].push_back((a1-1)*m+b1);
}
if(b1>1){
v[(a1-1)*m+b1].push_back((a1-1)*m+b1-1);
v[(a1-1)*m+b1-1].push_back((a1-1)*m+b1);
}
if(a1<n){
v[a1*m+b1].push_back((a1-1)*m+b1);
v[(a1-1)*m+b1].push_back(a1*m+b1);
}
if(b1<m){
v[(a1-1)*m+b1+1].push_back((a1-1)*m+b1+1);
v[(a1-1)*m+b1].push_back((a1-1)*m+b1+1);
}
}
for(i=1;i<=n*m;i++) {
if(viz[i]) continue;
v1.clear();cnt=0;
dfs(i);
if(3*cnt>v1.size()){
cout<<"No";return 0;
}
sort(v1.begin(),v1.end());
for(j=0;j<3*cnt;j++)
rasp-=v1[j];
}
cout<<rasp;
return 0;
}