Submission #345659

#TimeUsernameProblemLanguageResultExecution timeMemory
345659pggpPaint (COI20_paint)C++14
17 / 100
3087 ms124592 KiB
#include <bits/stdc++.h> using namespace std; int R, S; int parent[250000]; int siz[250000]; bool db = false; int find(int x){ if(parent[x] == x){ return x; } return parent[x] = find(parent[x]); } void un(int x, int y){ parent[find(x)] = find(y); } vector < int > E[250000]; int col[250000]; bool active[250000]; void union_vertices(int x, int y){ if(!active[x] or !active[y]) return; //cout << "UNION " << x << " " << y << endl; un(x, y); set < int > S; vector < int > v; vector < int > v1; for(int ver : E[y]){ if(S.find(ver) == S.end() and active[ver]){ S.insert(ver); v.push_back(ver); } } for(int ver : E[x]){ if(S.find(ver) == S.end() and active[ver]){ S.insert(ver); v1.push_back(ver); } } E[x].clear(); active[x] = false; E[y].clear(); for(int ver : v){ //cout << "ver = " << ver << endl; E[y].push_back(ver); } for(int ver : v1){ if(ver == y) continue; //cout << "ver = " << ver << endl; E[y].push_back(ver); E[ver].push_back(y); } } bool used[250000]; stack < int > us; void color(int v, int c){ //cout << v << ":" << c << endl; col[v] = c; vector < int > t = E[v]; for(int ver : t){ if(col[ver] == c){ union_vertices(ver, v); } } } void print_output(){ for (int y = 0; y < R; ++y) { for (int x = 0; x < S; ++x) { cout << col[find(y * S + x)] << " "; if(db) cout << "(" << find(y * S + x) << ")"; } cout << endl; } if(db) { for(int i = 0; i < R * S; i++){ cout << i << ": "; for(int v : E[i]){ cout << v << " "; } cout << endl; } } } int main(){ cin.tie(0); cout.tie(0); ios_base::sync_with_stdio(false); cin >> R >> S; for (int i = 0; i < R * S; ++i) { active[i] = true; col[i] = 100001 + i; parent[i] = i; if(i % S != S - 1){ E[i].push_back(i + 1); } if(i % S != 0){ E[i].push_back(i - 1); } if(i >= S){ E[i].push_back(i - S); } if(i < R*S - S){ E[i].push_back(i + S); } } for (int y = 0; y < R; ++y) { for (int x = 0; x < S; ++x) { int c; cin >> c; color(find(y * S + x), c); //print_output(); //cout << endl << endl; } } int q; cin >> q; while(q--){ int r, s, c; cin >> r >> s >> c; r--; s--; if(db) print_output(); if(db) cout << endl << endl; color(find(r * S + s), c); //print_output(); //cout << endl << endl; } print_output(); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...