Skip to content

Commit 395e3b5

Browse files
committed
Time: 1 ms (64.83%), Space: 26.5 MB (81.36%) - LeetHub
1 parent fe4cfb8 commit 395e3b5

File tree

1 file changed

+9
-32
lines changed

1 file changed

+9
-32
lines changed

1267-count-servers-that-communicate/1267-count-servers-that-communicate.cpp

+9-32
Original file line numberDiff line numberDiff line change
@@ -1,56 +1,33 @@
11
class Solution {
22
public:
33

4-
int dfs(int src,int par,map<int,set<int>>&list,map<int,int>&visit)
5-
{
6-
if(visit[src])
7-
return 0;
8-
int count=1;
9-
visit[src]=1;
10-
for(auto child:list[src])
11-
{
12-
if(child==par||visit[child])continue;
13-
count+=dfs(child,src,list,visit);
14-
}
15-
return count;
16-
}
17-
184
int countServers(vector<vector<int>>& grid) {
19-
map<int,set<int>>list;
205
int n=grid.size(),m=grid[0].size();
6+
vector<int>rows(m,0),cols(n,0);
217
for(int i=0;i<n;i++)
228
{
239
for(int j=0;j<m;j++)
2410
{
2511
if(!grid[i][j])continue;
26-
int u=i*m+j;
27-
for(int k=j+1;k<m;k++)
28-
{
29-
if(!grid[i][k])continue;
30-
int v=i*m+k;
31-
list[u].insert(v);
32-
}
12+
rows[j]++;
3313
}
3414
}
3515
for(int i=0;i<m;i++)
3616
{
3717
for(int j=0;j<n;j++)
3818
{
3919
if(!grid[j][i])continue;
40-
int u=j*m+i;
41-
for(int k=j+1;k<n;k++)
42-
{
43-
if(!grid[k][i])continue;
44-
int v=k*m+i;
45-
list[u].insert(v);
46-
}
20+
cols[j]++;
4721
}
4822
}
4923
int count=0;
50-
map<int,int>visit;
51-
for(auto x:list)
24+
for(int i=0;i<n;i++)
5225
{
53-
count+=dfs(x.first,-1,list,visit);
26+
for(int j=0;j<m;j++)
27+
{
28+
if(grid[i][j]&&(rows[j]>1||cols[i]>1))
29+
count++;
30+
}
5431
}
5532
return count;
5633
}

0 commit comments

Comments
 (0)