Submission #239934

#TimeUsernameProblemLanguageResultExecution timeMemory
239934BorbiSkandi (COCI20_skandi)C++14
110 / 110
1464 ms43512 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 = 5e2 + 5; const int MAXK = 1e6 + 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[MAXK]; int vis[MAXK]; 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[MAXK]; int con[MAXK]; 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[MAXK]; //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]) { int tr = 1; if(con[x] == -1) tr = 0; if(t == 0) { if(con[x] != v) dfs(x, t ^ 1); //{ //} } else { int tr = 1; if(con[v] == -1) tr = 0; if(con[v] == x) { dfs(x, t ^ 1); } } } } void solve() { for(int i = 0; i < MAXK; 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 << " DESNO\n"; } for(auto x : scnd) { cout << c_a[x].first << " " << c_a[x].second + 1 << " DOLJE\n"; } } int main() { ios::sync_with_stdio(0); cin.tie(0); read_input(); solve(); return 0; }

Compilation message (stderr)

skandi.cpp: In function 'void dfs(int, bool)':
skandi.cpp:132:8: warning: variable 'tr' set but not used [-Wunused-but-set-variable]
    int tr = 1;
        ^~
skandi.cpp:121:7: warning: variable 'tr' set but not used [-Wunused-but-set-variable]
   int tr = 1;
       ^~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...