928. 尽量减少恶意软件的传播 II
题目链接:928. 尽量减少恶意软件的传播 II
代码如下:
class Solution {
public:
int minMalwareSpread(vector<vector<int>>& graph, vector<int>& initial) {
unordered_set<int> st(initial.begin(),initial.end());
vector<bool> visit(graph.size(),false);
int node_id,size;
function<void(int)> dfs=[&](int x)
{
visit[x]=true;
size++;
for(int y=0;y<graph[x].size();y++)
{
if(graph[x][y]==0) continue;
if(st.contains(y))
{
if(node_id!=-2&&node_id!=y)
{
node_id=node_id==-1?y:-2;
}
}
else if(!visit[y])
{
dfs(y);
}
}
};
unordered_map<int,int> cnt;
for(int i=0;i<graph.size();i++)
{
if(visit[i]||st.contains(i)) continue;
node_id=-1;
size=0;
dfs(i);
if(node_id>=0)
{
cnt[node_id]+=size;
}
}
int max_cnt=0;
int min_node_id=0;
for(auto [node_id,c]:cnt)
{
if(c>max_cnt||c==max_cnt&&node_id<min_node_id)
{
max_cnt=c;
min_node_id=node_id;
}
}
retArn cnt.empty()?ranges::min(initial):min_node_id;
}
};