fork download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. typedef long long ll;
  4.  
  5. #define pb push_back
  6. #define mp make_pair
  7. #define pii pair<ll, ll>
  8.  
  9. #define N 2003
  10. #define MOD 1e9 + 7
  11.  
  12. ll n, m;
  13. ll a[N][N];
  14. list<pii> q;
  15. bool vis[N][N];
  16. vector<pii> size_ind;
  17. ll ind;
  18.  
  19. void BFS(ll x, ll y) {
  20. ll cnt = 0, num = a[x][y];
  21. while(!q.empty()) {
  22. pii ele = q.front();
  23. q.pop_front();
  24. ll i = ele.first, j = ele.second;
  25. if(vis[i][j]) {
  26. continue;
  27. }
  28. vis[i][j] = true; cnt++;
  29. if(i > 0) {
  30. if(a[i - 1][j] == num) {
  31. q.pb(mp(i - 1, j));
  32. }
  33. }
  34. if(i < n - 1) {
  35. if(a[i + 1][j] == num) {
  36. q.pb(mp(i + 1, j));
  37. }
  38. }
  39. if(j > 0) {
  40. if(a[i][j - 1] == num) {
  41. q.pb(mp(i, j - 1));
  42. }
  43. }
  44. if(j < m - 1) {
  45. if(a[i][j + 1] == num) {
  46. q.pb(mp(i, j + 1));
  47. }
  48. }
  49. }
  50. size_ind.pb(mp(cnt, ind));
  51. ind++;
  52. }
  53.  
  54. int main() {
  55. cin >> n >> m;
  56. for(ll i = 0; i < n; i++) {
  57. for(ll j = 0; j < m; j++) {
  58. cin >> a[i][j];
  59. }
  60. }
  61. ind = 0;
  62. for(ll i = 0; i < n; i++) {
  63. for(ll j = 0; j < m; j++) {
  64. vis[i][j] = false;
  65. }
  66. }
  67. for(ll i = 0; i < n; i++) {
  68. for(ll j = 0; j < m; j++) {
  69. if(vis[i][j]) {
  70. continue;
  71. }
  72. q.pb(mp(i, j));
  73. BFS(i, j);
  74. }
  75. }
  76.  
  77. // What to do next?? I'm not getting it :(
  78.  
  79.  
  80. return 0;
  81. }
Success #stdin #stdout 0s 4364KB
stdin
Standard input is empty
stdout
Standard output is empty