Submission #345648

#TimeUsernameProblemLanguageResultExecution timeMemory
345648pggpPaint (COI20_paint)C++14
0 / 100
88 ms14700 KiB
#include <bits/stdc++.h> using namespace std; int R, S; int parent[250000]; int siz[250000]; 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){ un(x, y); set < int > S; vector < int > v; for(int ver : E[x]){ if(S.find(ver) == S.begin() and active[ver]){ S.insert(ver); v.push_back(ver); } } for(int ver : E[y]){ if(S.find(ver) == S.begin() and active[ver]){ S.insert(ver); v.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); } } bool used[250000]; stack < int > us; void color(int v, int c){ //cout << v << ":" << c << endl; col[v] = c; for(int ver : E[v]){ if(col[ver] == c){ union_vertices(v, ver); } } } void print_output(){ for (int y = 0; y < R; ++y) { for (int x = 0; x < S; ++x) { cout << col[find(y * S + x)] << " "; } 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(); } } int q; cin >> q; while(q--){ int r, s, c; cin >> r >> s >> c; r--; s--; //print_output(); //cout << endl << endl; color(find(r * S + s), c); } 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...