Submission #367762

#TimeUsernameProblemLanguageResultExecution timeMemory
367762arnold518Paint (COI20_paint)C++14
0 / 100
196 ms49772 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; typedef pair<int, int> pii; typedef pair<ll, ll> pll; const int MAXN = 200000; const int dy[] = {-1, 1, 0, 0}; const int dx[] = {0, 0, -1, 1}; int N, M, Q; vector<vector<int>> A; int f(int y, int x) { return x+(y-1)*M; } int C[MAXN+10]; struct Data { int y, x, c; }; Data B[MAXN+10]; set<int> adj[MAXN+10]; int par[MAXN+10]; int Find(int x) { if(x==par[x]) return x; return par[x]=Find(par[x]); } void Union(int x, int y) { x=Find(x); y=Find(y); if(adj[x].size()>adj[y].size()) swap(x, y); for(auto it : adj[x]) { int t=Find(it); if(t==y) continue; if(t==x) continue; adj[y].insert(t); } adj[x].clear(); par[x]=y; } int main() { scanf("%d%d", &N, &M); A=vector<vector<int>>(N+10, vector<int>(M+10)); for(int i=1; i<=N; i++) { for(int j=1; j<=M; j++) { scanf("%d", &A[i][j]); } } for(int i=1; i<=N*M; i++) par[i]=i; for(int i=1; i<=N; i++) { for(int j=1; j<=M; j++) { if(i!=N) { if(A[i][j]!=A[i+1][j]) { adj[f(i, j)].insert(f(i+1, j)); adj[f(i+1, j)].insert(f(i, j)); } } if(j!=M) { if(A[i][j]!=A[i][j+1]) { adj[f(i, j+1)].insert(f(i, j)); adj[f(i, j)].insert(f(i, j+1)); } } } } for(int i=1; i<=N; i++) for(int j=1; j<=M; j++) C[f(i, j)]=A[i][j]; for(int i=1; i<=N; i++) { for(int j=1; j<=M; j++) { if(i!=N) { if(A[i][j]==A[i+1][j]) { Union(f(i, j), f(i+1, j)); } } if(j!=M) { if(A[i][j]==A[i][j+1]) { Union(f(i, j), f(i, j+1)); } } } } scanf("%d", &Q); for(int i=1; i<=Q; i++) { scanf("%d%d%d", &B[i].y, &B[i].x, &B[i].c); } for(int i=1; i<=Q; i++) { int v=Find(f(B[i].y, B[i].x)); if(C[v]==B[i].c) continue; C[v]=B[i].c; int now=v; vector<int> VV; for(auto nxt : adj[now]) { nxt=Find(nxt); if(C[nxt]==C[v]) { VV.push_back(nxt); } } for(auto it : VV) Union(it, now); } for(int i=1; i<=N; i++) { for(int j=1; j<=M; j++) { printf("%d ", C[Find(f(i, j))]); } printf("\n"); } }

Compilation message (stderr)

paint.cpp: In function 'int main()':
paint.cpp:53:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   53 |  scanf("%d%d", &N, &M);
      |  ~~~~~^~~~~~~~~~~~~~~~
paint.cpp:60:9: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   60 |    scanf("%d", &A[i][j]);
      |    ~~~~~^~~~~~~~~~~~~~~~
paint.cpp:110:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  110 |  scanf("%d", &Q);
      |  ~~~~~^~~~~~~~~~
paint.cpp:113:8: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  113 |   scanf("%d%d%d", &B[i].y, &B[i].x, &B[i].c);
      |   ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...