Submission #464698

#TimeUsernameProblemLanguageResultExecution timeMemory
464698RaresFelixT-Covering (eJOI19_covering)C++17
100 / 100
642 ms30292 KiB
#include <bits/stdc++.h> #define MN 717171 #define MM 1007171 #define INF 1000000000 using namespace std; int n, m, k; typedef pair<int, int> ii; //vector<int> A[MN], B[MN]; vector<vector<int> > A, B; bool V[MM]; deque<int> Nod; vector<ii> Noduri; int main() { cin >> n >> m; A.assign(n+2, vector<int>(m+2)); B.assign(n+2, vector<int>(m+2)); for(int i = 1; i <= n; ++i) for(int j = 1; j <= m; ++j) cin >> A[i][j]; cin >> k; vector<ii> C(k+2); vector<vector<int> > L(k+2, vector<int>()); for(int i = 1; i <= k; ++i){ cin >> C[i].first >> C[i].second; ++C[i].first; ++C[i].second; B[C[i].first][C[i].second] = i; } int VX[] = {-2, -1, -1, -1, 0, 0}; //12 / 2 int VY[] = {0, -1, 0, 1, -2, -1}; for(int i = 1; i <= k; ++i){ int ln, cn; for(int d = 0; d < 6; ++d){ ln = C[i].first + VX[d]; cn = C[i].second + VY[d]; if(ln < 1 || cn < 1 || ln > n || cn > m || !B[ln][cn]) continue; L[i].push_back(B[ln][cn]); L[B[ln][cn]].push_back(i); } } int DX[] = {-1, 0, 1, 0}; int DY[] = {0, 1, 0, -1}; int re = 0; for(int i = 1; i <= k; ++i){ if(V[i]) continue; V[i] = 1; Nod.push_back(i); int acum; while(!Nod.empty()){ acum = Nod.front(); Nod.pop_front(); Noduri.push_back(C[acum]); for(auto it : L[acum]) if(!V[it]){ V[it] = 1; Nod.push_back(it); } } set<ii> Vecini; int ln, cn; for(auto it : Noduri) { re += A[it.first][it.second]; for(int d = 0; d < 4; ++d){ ln = it.first + DX[d]; cn = it.second + DY[d]; if(ln < 1 || cn < 1 || ln > n || cn > m || B[ln][cn])continue; Vecini.insert({ln, cn}); } } for(auto it : Noduri) Vecini.erase(it); if(Vecini.size() < Noduri.size() * 3){ cout << "No\n"; return 0; } else if(Vecini.size() == Noduri.size() * 3){ for(auto it : Vecini) re += A[it.first][it.second]; } else { int mi = INF; for(auto it : Vecini){ re += A[it.first][it.second]; mi = min(mi, A[it.first][it.second]); } re -= mi; } Noduri.clear(); while(!Nod.empty())Nod.pop_back(); } cout << re << "\n"; return 0; }
#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...