Submission #239925

#TimeUsernameProblemLanguageResultExecution timeMemory
239925BorbiSkandi (COCI20_skandi)C++14
9 / 110
13 ms8832 KiB
#include <bits/stdc++.h> using namespace std; /*struct edge { int next, to, flow; edge(int _to, int _next, int _flow) { next = _next; to = _to; flow = _flow; } };*/ const int MAXN = 1e3 + 5; int n, m; string str[MAXN]; /*edge e[MAXM]; int head[MAXN], br; void add_edge(int v, int w, int c) { e[br] = edge(w, head[v], c); head[v] = br++; }*/ map <int, pair<int, int> > r_a, c_a; int cntr, cntc; int rw[MAXN][MAXN], col[MAXN][MAXN]; vector <int> graph[MAXN]; int vis[MAXN]; void read_input() { cin >> n >> m; /*for(int i = 0; i < MAXN; i++) { head[i] = -1; }*/ for(int i = 0; i < n; i++) { cin >> str[i]; } for(int i = 1; i < n; i++) { for(int j = 1; j < m; j++) { if(str[i][j] == '1') continue; if(str[i][j - 1] == '1') { rw[i][j] = cntr++; r_a[cntr - 1] = {i, j}; } else { rw[i][j] = rw[i][j - 1]; } if(str[i - 1][j] == '1') { col[i][j] = cntc++; c_a[cntc - 1] = {i, j}; } else { col[i][j] = col[i - 1][j]; } } } for(int i = 1; i < n; i++) { for(int j = 1; j < m; j++) { if(str[i][j] == '0') { //cout << r_a[rw[i][j]].first << " " << r_a[rw[i][j]].second << " " << c_a[col[i][j]].first << " " << c_a[col[i][j]].second << "\n"; graph[rw[i][j]].push_back(cntr + col[i][j]); graph[cntr + col[i][j]].push_back(rw[i][j]); } } } //cout << cntr << " " << cntc << "\n"; } bool matched[MAXN]; int con[MAXN]; int timer; bool match(int v) { if(vis[v] == timer) return false; vis[v] = timer; for(auto x : graph[v]) { if(con[x] == -1 || match(con[x])) { con[x] = v; return matched[v] = true; } } return false; } bool added[MAXN]; //vector <int> z; void dfs(int v, bool t) { if(!added[v]) { //z.push_back(v); added[v] = true; } else return; if(t) { cout << "DAS"; } for(auto x : graph[v]) { if(t == 0) { if(con[x] == -1) { dfs(x, t ^ 1); } } else { if(matched[x]) { dfs(x, t ^ 1); } } } } void solve() { for(int i = 0; i < MAXN; i++) { con[i] = -1; } for(int i = 0; i < cntr; i++) { timer++; match(i); //cout << matched[i]; } for(int i = 0; i < cntr; i++) { if(!matched[i]) { dfs(i, 0); } } vector <int> fst, scnd; for(int i = 0; i < cntr; i++) { if(!added[i]) { fst.push_back(i); } } for(int i = 0; i < cntc; i++) { if(added[i + cntr]) { scnd.push_back(i); } } cout << fst.size() + scnd.size() << "\n"; for(auto x : fst) { cout << r_a[x].first + 1 << " " << r_a[x].second + 1 << " DESNO\n"; } for(auto x : scnd) { cout << c_a[x].first + 1 << " " << c_a[x].second + 1 << " DOLJE\n"; } } int main() { ios::sync_with_stdio(0); cin.tie(0); read_input(); solve(); return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...