-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy path0947.cpp
More file actions
31 lines (28 loc) · 946 Bytes
/
Copy path0947.cpp
File metadata and controls
31 lines (28 loc) · 946 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
class Solution {
public:
int removeStones(vector<vector<int>> &stones) {
unordered_map<int, vector<int>> rows, cols;
unordered_set<int> seen;
for (int s = 0; s < size(stones); ++s)
rows[stones[s][0]].push_back(s), cols[stones[s][1]].push_back(s);
int c = 0;
stack<int> st;
for (int s = 0; s < size(stones); ++s) {
if (seen.count(s)) continue;
st.push(s);
while (!st.empty()) {
int s = st.top();
st.pop();
if (seen.count(s)) continue;
seen.insert(s);
int r = stones[s][0], c = stones[s][1];
for (auto ss : rows[r])
if (!seen.count(ss)) st.push(ss);
for (auto ss : cols[c])
if (!seen.count(ss)) st.push(ss);
}
c++;
}
return size(stones) - c;
}
};