Untitled
unknown
plain_text
a year ago
1.9 kB
6
Indexable
#include <bits/stdc++.h> using namespace std; typedef long long int ll; #define endl "\n" const double PI = 3.14159265358979; const ll INF = 1e18 + 7; const ll MOD = 1e9 + 7; const ll nax = 100005; const int LOG = 25; int dx[4] = {0, 0, 1, -1}; int dy[4] = {1, -1, 0, 0}; int n, m; void dfs(int i, int j, vector<vector<int> > &matrix, vector<vector<int> > &component, int groupId, int &groupSize) { component[i][j] = groupId; groupSize++; for (int k = 0; k < 4; k++) { int x = i + dx[k]; int y = j + dy[k]; if (x >= 0 && x < n && y >= 0 && y < m && matrix[x][y] == 0 && component[x][y] == 0) { dfs(x, y, matrix, component, groupId, groupSize); } } } void solve() { cin >> n >> m; vector<vector<int> > matrix(n, vector<int> (m)); vector<vector<int> > component(n, vector<int> (m, 0)); for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { cin >> matrix[i][j]; } } int groupId = 0, groupSize = 0; map<int, int> groupSizeById; for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { if (matrix[i][j] || component[i][j]) continue; groupId++; groupSize = 0; dfs(i, j, matrix, component, groupId, groupSize); groupSizeById[groupId] = groupSize; } } for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { if (matrix[i][j] || groupSizeById[component[i][j]] == 1) continue; matrix[i][j] = groupSizeById[component[i][j]]; } } for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { cout << matrix[i][j] << " "; } cout << endl; } } signed main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); int t; cin >> t; while(t--) solve(); return 0; }
Editor is loading...
Leave a Comment